fraim-framework 2.0.154 → 2.0.159
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/src/ai-hub/hosts.js +135 -8
- package/dist/src/ai-hub/server.js +201 -1
- package/dist/src/cli/commands/init-project.js +46 -34
- package/dist/src/cli/commands/sync.js +22 -1
- package/dist/src/cli/setup/ide-invocation-surfaces.js +2 -2
- package/dist/src/cli/utils/github-workflow-sync.js +231 -0
- package/dist/src/cli/utils/managed-agent-paths.js +1 -1
- package/dist/src/cli/utils/project-bootstrap.js +6 -3
- package/dist/src/core/ai-mentor.js +46 -37
- package/dist/src/core/config-loader.js +68 -0
- package/dist/src/core/fraim-config-schema.generated.js +267 -1
- package/dist/src/core/utils/fraim-labels.js +182 -0
- package/dist/src/core/utils/git-utils.js +22 -1
- package/dist/src/core/utils/project-fraim-paths.js +58 -0
- package/dist/src/first-run/types.js +1 -1
- package/dist/src/local-mcp-server/learning-context-builder.js +77 -52
- package/dist/src/local-mcp-server/stdio-server.js +212 -13
- package/package.json +5 -2
- package/public/ai-hub/index.html +271 -229
- package/public/ai-hub/script.js +879 -527
- package/public/ai-hub/styles.css +877 -694
- package/public/first-run/index.html +35 -35
- package/public/first-run/script.js +667 -667
package/public/ai-hub/index.html
CHANGED
|
@@ -1,229 +1,271 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>AI Hub</title>
|
|
7
|
-
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Crect width='48' height='48' rx='10' fill='%233d8a6e'/%3E%3Ctext x='24' y='32' text-anchor='middle' font-family='Helvetica,Arial,sans-serif' font-size='22' font-weight='700' fill='white'%3EH%3C/text%3E%3C/svg%3E">
|
|
8
|
-
<link rel="stylesheet" href="./styles.css">
|
|
9
|
-
</head>
|
|
10
|
-
<body>
|
|
11
|
-
|
|
12
|
-
<div class="page">
|
|
13
|
-
|
|
14
|
-
<header class="header">
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
</
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
</
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
<
|
|
59
|
-
<span class="
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
<div class="
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
<
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
</
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
</div>
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
<div
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
<
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
<div id="
|
|
214
|
-
</div>
|
|
215
|
-
<div
|
|
216
|
-
<
|
|
217
|
-
<div class="
|
|
218
|
-
<
|
|
219
|
-
<button
|
|
220
|
-
</div>
|
|
221
|
-
</div>
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
</
|
|
229
|
-
</
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>AI Hub</title>
|
|
7
|
+
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Crect width='48' height='48' rx='10' fill='%233d8a6e'/%3E%3Ctext x='24' y='32' text-anchor='middle' font-family='Helvetica,Arial,sans-serif' font-size='22' font-weight='700' fill='white'%3EH%3C/text%3E%3C/svg%3E">
|
|
8
|
+
<link rel="stylesheet" href="./styles.css">
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
|
|
12
|
+
<div class="page">
|
|
13
|
+
|
|
14
|
+
<header class="header">
|
|
15
|
+
<h1 class="header-title">Manage your FRAIM Employees</h1>
|
|
16
|
+
<section class="welcome">
|
|
17
|
+
Hi <strong class="you">there</strong>, remember, you are the
|
|
18
|
+
<span class="concept">AI Manager<button class="info" data-concept="manager" aria-label="What is AI Manager?">i</button>
|
|
19
|
+
<span class="popover" id="pop-manager">
|
|
20
|
+
<span class="pop-title">AI Manager</span>
|
|
21
|
+
That's you. You decide what outcome matters, pick the right job, and hold the bar on quality. You're not writing the work - you're directing it.
|
|
22
|
+
<a class="pop-link" href="#" data-target="jobs-manager">See manager jobs</a>
|
|
23
|
+
<span class="pop-jobs" id="jobs-manager"></span>
|
|
24
|
+
</span></span>.
|
|
25
|
+
Delegate jobs to your
|
|
26
|
+
<span class="concept">AI Employees<button class="info" data-concept="employee" aria-label="What is AI Employee?">i</button>
|
|
27
|
+
<span class="popover" id="pop-employee">
|
|
28
|
+
<span class="pop-title">AI Employee</span>
|
|
29
|
+
The coding agent - Codex, Claude, or another - that actually does the work you assign. AI Hub is where you direct them; the agent itself is the employee.
|
|
30
|
+
<a class="pop-link" href="#" data-target="jobs-employee">See employee jobs</a>
|
|
31
|
+
<span class="pop-jobs" id="jobs-employee"></span>
|
|
32
|
+
</span></span>,
|
|
33
|
+
<span class="concept">Coach<button class="info" data-concept="coach" aria-label="What is Coach?">i</button>
|
|
34
|
+
<span class="popover" id="pop-coach">
|
|
35
|
+
<span class="pop-title">Coach</span>
|
|
36
|
+
Add context, raise the bar, or correct course mid-flight without abandoning the conversation. Same job, sharper guidance.
|
|
37
|
+
<a class="pop-link" href="#" data-target="jobs-coach">See coaching jobs</a>
|
|
38
|
+
<span class="pop-jobs" id="jobs-coach"></span>
|
|
39
|
+
</span></span>
|
|
40
|
+
them,
|
|
41
|
+
<span class="concept">Verify<button class="info" data-concept="verify" aria-label="What is Verify?">i</button>
|
|
42
|
+
<span class="popover" id="pop-verify">
|
|
43
|
+
<span class="pop-title">Verify</span>
|
|
44
|
+
Check that the artifact actually solved the problem before you trust completion. Read the result, not just the logs.
|
|
45
|
+
<a class="pop-link" href="#" data-target="jobs-verify">See verification jobs</a>
|
|
46
|
+
<span class="pop-jobs" id="jobs-verify"></span>
|
|
47
|
+
</span></span>
|
|
48
|
+
their work, and expect them to
|
|
49
|
+
<span class="concept">Learn<button class="info" data-concept="learn" aria-label="What is Learn?">i</button>
|
|
50
|
+
<span class="popover" id="pop-learn">
|
|
51
|
+
<span class="pop-title">Learn</span>
|
|
52
|
+
Each run should make the next one better. Your coaching becomes their lasting habit.
|
|
53
|
+
<a class="pop-link" href="#" data-target="jobs-learn">See learning jobs</a>
|
|
54
|
+
<span class="pop-jobs" id="jobs-learn"></span>
|
|
55
|
+
</span></span>
|
|
56
|
+
and get better. Let your employees make you shine.
|
|
57
|
+
</section>
|
|
58
|
+
<button class="project-button" type="button" id="project-button">
|
|
59
|
+
<span class="folder">Project</span>
|
|
60
|
+
<strong id="project-name">Choose a folder</strong>
|
|
61
|
+
</button>
|
|
62
|
+
</header>
|
|
63
|
+
|
|
64
|
+
<div class="layout">
|
|
65
|
+
<aside class="rail">
|
|
66
|
+
<button class="new-conv" type="button" id="new-conv-btn">+ New job</button>
|
|
67
|
+
<div class="rail-note">Alpha: browser shell for directing employees across your project.</div>
|
|
68
|
+
<section class="rail-section rail-section--employees">
|
|
69
|
+
<div class="rail-section-label">Hired employees</div>
|
|
70
|
+
<div class="team-roster" id="team-roster" hidden></div>
|
|
71
|
+
</section>
|
|
72
|
+
|
|
73
|
+
<section class="rail-section rail-section--runs">
|
|
74
|
+
<div class="rail-section-label">Runs</div>
|
|
75
|
+
<div class="conv-list" id="conv-list"></div>
|
|
76
|
+
</section>
|
|
77
|
+
</aside>
|
|
78
|
+
|
|
79
|
+
<main class="conversation" id="conversation">
|
|
80
|
+
<div class="empty-state" id="empty">
|
|
81
|
+
<h3>No job selected</h3>
|
|
82
|
+
<p>Pick an existing job from the left, or click <strong>+ New job</strong> to give your employee something to work on.</p>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<div id="active-conv" hidden>
|
|
86
|
+
<div class="conv-topline">
|
|
87
|
+
<div class="employee-identity" id="active-identity"></div>
|
|
88
|
+
<span id="active-title" class="conv-job-title"></span>
|
|
89
|
+
<div class="run-state-pill" id="run-state-pill"></div>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<div class="conversation-status">
|
|
93
|
+
<div class="tracker tracker-inline" id="tracker" aria-label="Job progress" hidden>
|
|
94
|
+
<div class="tracker-rows" id="tracker-rows"></div>
|
|
95
|
+
<div class="tracker-note" id="tracker-note" hidden></div>
|
|
96
|
+
<div class="totals" id="totals" aria-label="Run totals" hidden></div>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<details class="panel-details panel-details--thread" id="thread-panel" open>
|
|
101
|
+
<summary>
|
|
102
|
+
<span class="panel-summary-copy">
|
|
103
|
+
<span class="panel-kicker">Manager and employee thread</span>
|
|
104
|
+
</span>
|
|
105
|
+
</summary>
|
|
106
|
+
<div class="messages" id="messages"></div>
|
|
107
|
+
</details>
|
|
108
|
+
|
|
109
|
+
<div class="support-stack">
|
|
110
|
+
<details class="panel-details panel-details--coach" id="coach-panel" open>
|
|
111
|
+
<summary>
|
|
112
|
+
<span class="panel-summary-copy">
|
|
113
|
+
<span class="panel-kicker">Coach the employee</span>
|
|
114
|
+
<span class="panel-summary-text" id="coach-summary">Open when you want to steer the next step</span>
|
|
115
|
+
</span>
|
|
116
|
+
<span class="active-employee-row" onclick="event.stopPropagation()">
|
|
117
|
+
<span class="active-employee-label">Maestro</span>
|
|
118
|
+
<select id="active-employee-select" class="employee-select inline" aria-label="Employee"></select>
|
|
119
|
+
</span>
|
|
120
|
+
</summary>
|
|
121
|
+
<div class="panel-body">
|
|
122
|
+
<div class="coach">
|
|
123
|
+
<div class="quick-coach-row" id="quick-coach-btns" hidden>
|
|
124
|
+
<button class="ghost quick-coach-btn" type="button" data-job="recognize-good-work">👍 Good job</button>
|
|
125
|
+
<button class="ghost quick-coach-btn" type="button" data-job="analyze-why-you-messed-up">🔍 Why did you mess up?</button>
|
|
126
|
+
<button class="ghost quick-coach-btn" type="button" data-job="follow-your-mentor">📋 Follow the process</button>
|
|
127
|
+
<button class="ghost quick-coach-btn" type="button" id="other-manager-jobs-btn">Other manager jobs ▾</button>
|
|
128
|
+
</div>
|
|
129
|
+
<div class="coach-input">
|
|
130
|
+
<textarea id="coach-text" placeholder="Tell the employee what to do next..."></textarea>
|
|
131
|
+
<button class="send-button" type="button" id="send" disabled>↑</button>
|
|
132
|
+
</div>
|
|
133
|
+
<div class="template-popover" id="template-popover" role="menu" hidden></div>
|
|
134
|
+
<div class="coach-note" id="coach-note"></div>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
</details>
|
|
138
|
+
|
|
139
|
+
<details class="micro panel-details" id="micro-manage">
|
|
140
|
+
<summary>
|
|
141
|
+
<span class="panel-summary-copy">
|
|
142
|
+
<span class="panel-kicker">Micro-manage</span>
|
|
143
|
+
<span class="panel-summary-text">Raw host details</span>
|
|
144
|
+
</span>
|
|
145
|
+
</summary>
|
|
146
|
+
<pre class="micro-log" id="micro-log"></pre>
|
|
147
|
+
</details>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
|
|
151
|
+
<!-- Issue #442: Direct (B) panel — shown only in A/B mode, mirrors FRAIM panel layout -->
|
|
152
|
+
<div id="ab-direct-panel" hidden>
|
|
153
|
+
<div class="conv-topline">
|
|
154
|
+
<div class="ab-direct-identity">
|
|
155
|
+
<span class="ab-direct-label">Direct (No FRAIM)</span>
|
|
156
|
+
</div>
|
|
157
|
+
<span class="conv-job-title"></span>
|
|
158
|
+
<div class="run-state-pill" id="ab-direct-pill"></div>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<div class="conversation-status">
|
|
162
|
+
<div class="tracker tracker-inline" id="ab-direct-tracker" aria-label="Direct run progress">
|
|
163
|
+
<div class="ab-direct-progress" id="ab-direct-progress"></div>
|
|
164
|
+
<div class="totals" id="ab-direct-totals" aria-label="Direct run totals" hidden></div>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
<details class="panel-details panel-details--thread" id="ab-direct-thread-panel" open>
|
|
169
|
+
<summary>
|
|
170
|
+
<span class="panel-summary-copy">
|
|
171
|
+
<span class="panel-kicker">Direct output (raw)</span>
|
|
172
|
+
</span>
|
|
173
|
+
</summary>
|
|
174
|
+
<pre class="ab-direct-log" id="ab-direct-log"></pre>
|
|
175
|
+
</details>
|
|
176
|
+
|
|
177
|
+
<div class="support-stack">
|
|
178
|
+
<details class="panel-details panel-details--coach" id="ab-direct-reply-panel" open>
|
|
179
|
+
<summary>
|
|
180
|
+
<span class="panel-summary-copy">
|
|
181
|
+
<span class="panel-kicker">Reply to Direct agent</span>
|
|
182
|
+
<span class="panel-summary-text" id="ab-direct-reply-summary">Open to send a follow-up</span>
|
|
183
|
+
</span>
|
|
184
|
+
</summary>
|
|
185
|
+
<div class="panel-body">
|
|
186
|
+
<div class="coach">
|
|
187
|
+
<div class="coach-input">
|
|
188
|
+
<textarea id="ab-direct-input" placeholder="Reply to the agent..."></textarea>
|
|
189
|
+
<button class="send-button" type="button" id="ab-direct-send" aria-label="Send reply to Direct agent" disabled>↑</button>
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
</details>
|
|
194
|
+
</div>
|
|
195
|
+
</div>
|
|
196
|
+
</main>
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
<p class="status-line" id="status-line" role="status" aria-live="polite"></p>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
<div class="modal-backdrop" id="modal" role="dialog" aria-modal="true" hidden>
|
|
203
|
+
<div class="modal">
|
|
204
|
+
|
|
205
|
+
<div id="step1">
|
|
206
|
+
<div class="modal-header">
|
|
207
|
+
<h2>What should the employee work on?</h2>
|
|
208
|
+
<p>Pick one job. You can always start a new job for different work.</p>
|
|
209
|
+
</div>
|
|
210
|
+
<div class="modal-body">
|
|
211
|
+
<input class="search" type="text" placeholder="Search jobs..." id="job-search">
|
|
212
|
+
<div id="job-persona-filter" hidden></div>
|
|
213
|
+
<div id="job-catalog"></div>
|
|
214
|
+
</div>
|
|
215
|
+
<div id="hire-notice" hidden>
|
|
216
|
+
<p id="hire-notice-text"></p>
|
|
217
|
+
<div class="hire-notice-actions">
|
|
218
|
+
<a id="hire-notice-link" href="#" target="_blank" rel="noopener" class="send-button">Go to Pricing</a>
|
|
219
|
+
<button id="hire-notice-back" type="button" class="ghost">Back to all jobs</button>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
<div class="modal-footer">
|
|
223
|
+
<span class="left" id="job-pick-status">Choose a job to continue</span>
|
|
224
|
+
<div class="right">
|
|
225
|
+
<button class="ghost" type="button" id="cancel1">Cancel</button>
|
|
226
|
+
<button class="ghost" type="button" id="freeform-btn">Just describe what you need</button>
|
|
227
|
+
<button class="send-button" type="button" id="next1" disabled>Next</button>
|
|
228
|
+
</div>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
<div id="step2" class="step2" hidden>
|
|
233
|
+
<div class="modal-header">
|
|
234
|
+
<h2>Tell the employee what you need</h2>
|
|
235
|
+
<p>A few sentences is enough. The employee will ask if anything is unclear.</p>
|
|
236
|
+
</div>
|
|
237
|
+
<div class="modal-body">
|
|
238
|
+
<div class="assigned-job">
|
|
239
|
+
<div class="label">Assigned job</div>
|
|
240
|
+
<div class="name" id="picked-name"></div>
|
|
241
|
+
<div class="desc" id="picked-desc"></div>
|
|
242
|
+
</div>
|
|
243
|
+
<textarea id="instructions" placeholder="What outcome do you want? Any context the employee should know?"></textarea>
|
|
244
|
+
<div class="employee-line">
|
|
245
|
+
<span class="employee-label">Employee:</span>
|
|
246
|
+
<select id="employee-select" class="employee-select"></select>
|
|
247
|
+
</div>
|
|
248
|
+
<div id="agent-install-panel"></div>
|
|
249
|
+
<div id="ab-toggle-wrap" hidden>
|
|
250
|
+
<label class="ab-toggle-label">
|
|
251
|
+
<input type="checkbox" id="ab-toggle">
|
|
252
|
+
Compare with Direct mode (no FRAIM)
|
|
253
|
+
</label>
|
|
254
|
+
<p id="ab-toggle-explanation" hidden>FRAIM runs the job on the left. A direct session with no FRAIM framework runs on the right. Compare results side by side.</p>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
<div class="modal-footer">
|
|
258
|
+
<span class="left">You can coach the employee with more detail after they start.</span>
|
|
259
|
+
<div class="right">
|
|
260
|
+
<button class="ghost" type="button" id="back2">Back</button>
|
|
261
|
+
<button class="send-button" type="button" id="start" disabled>Start</button>
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
</div>
|
|
265
|
+
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
|
|
269
|
+
<script src="./script.js"></script>
|
|
270
|
+
</body>
|
|
271
|
+
</html>
|