@plurnk/plurnk-web 0.0.0-stage → 1.0.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 (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +337 -2
  3. package/SPEC.md +869 -0
  4. package/ai.plurnk/.env.defaults +38 -0
  5. package/ai.plurnk/assets.json +193 -0
  6. package/ai.plurnk/creations.js +65 -0
  7. package/ai.plurnk/diagram-compiler.js +15 -0
  8. package/ai.plurnk/diagrams.js +130 -0
  9. package/ai.plurnk/directory-addresses.js +35 -0
  10. package/ai.plurnk/dist/assets/Temml-CCjoacWt.woff2 +0 -0
  11. package/ai.plurnk/dist/assets/index-DQK23MMn.js +2 -0
  12. package/ai.plurnk/dist/assets/index-DQK23MMn.js.br +0 -0
  13. package/ai.plurnk/dist/assets/index-DQK23MMn.js.gz +0 -0
  14. package/ai.plurnk/dist/assets/index-DgGvOprn.css +1 -0
  15. package/ai.plurnk/dist/assets/index-DgGvOprn.css.br +0 -0
  16. package/ai.plurnk/dist/assets/index-DgGvOprn.css.gz +0 -0
  17. package/ai.plurnk/dist/assets/math-renderer-CZ_XtOMq.css +1 -0
  18. package/ai.plurnk/dist/assets/math-renderer-CZ_XtOMq.css.br +0 -0
  19. package/ai.plurnk/dist/assets/math-renderer-CZ_XtOMq.css.gz +0 -0
  20. package/ai.plurnk/dist/assets/math-renderer-CnlgS6FH.js +96 -0
  21. package/ai.plurnk/dist/assets/math-renderer-CnlgS6FH.js.br +0 -0
  22. package/ai.plurnk/dist/assets/math-renderer-CnlgS6FH.js.gz +0 -0
  23. package/ai.plurnk/dist/assets/overview-IkhWTlh2.js +1 -0
  24. package/ai.plurnk/dist/assets/overview-IkhWTlh2.js.br +0 -0
  25. package/ai.plurnk/dist/assets/overview-IkhWTlh2.js.gz +0 -0
  26. package/ai.plurnk/dist/assets/preload-helper-BjS5LQBu.js +1 -0
  27. package/ai.plurnk/dist/assets/preload-helper-BjS5LQBu.js.br +0 -0
  28. package/ai.plurnk/dist/assets/preload-helper-BjS5LQBu.js.gz +0 -0
  29. package/ai.plurnk/dist/assets/session-BgePzPYk.js +4 -0
  30. package/ai.plurnk/dist/assets/session-BgePzPYk.js.br +0 -0
  31. package/ai.plurnk/dist/assets/session-BgePzPYk.js.gz +0 -0
  32. package/ai.plurnk/dist/assets/session-agent-DWERfauE.js +111 -0
  33. package/ai.plurnk/dist/assets/session-agent-DWERfauE.js.br +0 -0
  34. package/ai.plurnk/dist/assets/session-agent-DWERfauE.js.gz +0 -0
  35. package/ai.plurnk/dist/assets/src-BdHyjaXT.js +1 -0
  36. package/ai.plurnk/dist/assets/src-BdHyjaXT.js.br +0 -0
  37. package/ai.plurnk/dist/assets/src-Vt7-ppeC.js +6 -0
  38. package/ai.plurnk/dist/assets/src-Vt7-ppeC.js.br +0 -0
  39. package/ai.plurnk/dist/assets/src-Vt7-ppeC.js.gz +0 -0
  40. package/ai.plurnk/dist/icons/APACHE-2.0.txt +202 -0
  41. package/ai.plurnk/dist/icons/APACHE-2.0.txt.br +0 -0
  42. package/ai.plurnk/dist/icons/APACHE-2.0.txt.gz +0 -0
  43. package/ai.plurnk/dist/icons/NOTO-NOTICE.txt +10 -0
  44. package/ai.plurnk/dist/icons/NOTO-NOTICE.txt.br +0 -0
  45. package/ai.plurnk/dist/icons/NOTO-NOTICE.txt.gz +0 -0
  46. package/ai.plurnk/dist/icons/plurnk-maskable.svg +64 -0
  47. package/ai.plurnk/dist/icons/plurnk-maskable.svg.br +0 -0
  48. package/ai.plurnk/dist/icons/plurnk-maskable.svg.gz +0 -0
  49. package/ai.plurnk/dist/icons/plurnk.svg +63 -0
  50. package/ai.plurnk/dist/icons/plurnk.svg.br +0 -0
  51. package/ai.plurnk/dist/icons/plurnk.svg.gz +0 -0
  52. package/ai.plurnk/dist/index.html +421 -0
  53. package/ai.plurnk/dist/manifest.webmanifest +27 -0
  54. package/ai.plurnk/dist/manifest.webmanifest.br +0 -0
  55. package/ai.plurnk/dist/manifest.webmanifest.gz +0 -0
  56. package/ai.plurnk/dist/vendor/CFWORKER-JSON-SCHEMA-LICENSE.txt +25 -0
  57. package/ai.plurnk/dist/vendor/CFWORKER-JSON-SCHEMA-LICENSE.txt.br +0 -0
  58. package/ai.plurnk/dist/vendor/CFWORKER-JSON-SCHEMA-LICENSE.txt.gz +0 -0
  59. package/ai.plurnk/dist/vendor/DEPENDENCIES-LICENSE.txt +571 -0
  60. package/ai.plurnk/dist/vendor/DEPENDENCIES-LICENSE.txt.br +0 -0
  61. package/ai.plurnk/dist/vendor/DEPENDENCIES-LICENSE.txt.gz +0 -0
  62. package/ai.plurnk/dist/vendor/MARKED-FOOTNOTE-LICENSE.txt +25 -0
  63. package/ai.plurnk/dist/vendor/MARKED-FOOTNOTE-LICENSE.txt.br +0 -0
  64. package/ai.plurnk/dist/vendor/MARKED-FOOTNOTE-LICENSE.txt.gz +0 -0
  65. package/ai.plurnk/dist/vendor/OTM-LICENSE.txt +21 -0
  66. package/ai.plurnk/dist/vendor/OTM-LICENSE.txt.br +0 -0
  67. package/ai.plurnk/dist/vendor/OTM-LICENSE.txt.gz +0 -0
  68. package/ai.plurnk/dist/vendor/PICO-LICENSE.txt +21 -0
  69. package/ai.plurnk/dist/vendor/PICO-LICENSE.txt.br +0 -0
  70. package/ai.plurnk/dist/vendor/PICO-LICENSE.txt.gz +0 -0
  71. package/ai.plurnk/documents.js +483 -0
  72. package/ai.plurnk/http.js +69 -0
  73. package/ai.plurnk/index-document.js +5 -0
  74. package/ai.plurnk/module.js +326 -0
  75. package/ai.plurnk/session.js +319 -0
  76. package/ai.plurnk/static-assets.js +40 -0
  77. package/package.json +92 -5
  78. package/plugin.json +13 -0
@@ -0,0 +1,421 @@
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">
6
+ <meta name="color-scheme" content="light dark">
7
+ <meta name="theme-color" content="#148800">
8
+ <meta name="application-name" content="Plurnk">
9
+ <meta name="description" content="Plurnk agent workspace.">
10
+ <meta name="robots" content="noindex, nofollow">
11
+ <meta name="referrer" content="same-origin">
12
+ <title data-text="page-title">Plurnk</title>
13
+ <link rel="manifest" href="/manifest.webmanifest">
14
+ <link rel="icon" href="/icons/plurnk.svg" type="image/svg+xml" sizes="any">
15
+ <script type="module" crossorigin src="/assets/index-DQK23MMn.js"></script>
16
+ <link rel="modulepreload" crossorigin href="/assets/preload-helper-BjS5LQBu.js">
17
+ <link rel="stylesheet" crossorigin href="/assets/index-DgGvOprn.css">
18
+ </head>
19
+ <body>
20
+ <header>
21
+ <a href="/" title="Home"><img src="/icons/plurnk.svg" width="32" height="32" alt="Plurnk"></a>
22
+ <nav aria-label="Main navigation">
23
+ <ul>
24
+ <li data-connection-indicator><span role="img" aria-label="Disconnected" title="Disconnected"></span></li>
25
+ <!-- {§web-page-shell} Instantiated by the document server, not browser JavaScript. -->
26
+ <template id="session-navigation" data-otm-dynamic>
27
+ <li><a href="/account/" aria-label="Account" title="Account" data-text="account-icon">⚙️</a></li>
28
+ <li><form method="post" action="/auth/logout"><button type="submit" aria-label="Sign out" title="Sign out" data-text="sign-out-icon">✖</button></form></li>
29
+ </template>
30
+ </ul>
31
+ </nav>
32
+ </header>
33
+ <main id="main" data-page="home"></main>
34
+ <!-- {§web-session-directory} Inert directory card templates; the overview subscription reconciles them in place. -->
35
+ <template id="overview-list">
36
+ <ul></ul>
37
+ </template>
38
+ <template id="overview-empty">
39
+ <p data-i18n="no-sessions">No sessions.</p>
40
+ </template>
41
+ <template id="overview-background">
42
+ <details><summary data-i18n="background-work">Background work</summary><ul></ul></details>
43
+ </template>
44
+ <template id="session-card">
45
+ <li data-directory-entry="session">
46
+ <article aria-label="Session">
47
+ <header>
48
+ <span data-session-identity><a data-session-link></a> <span data-lifecycle="idle" role="img" aria-label="idle" title="idle"></span> <span></span></span><span data-session-workspace><span data-folder="false" role="img" aria-label="Folderless workspace"></span> <a data-text="name"></a></span>
49
+ </header>
50
+ </article>
51
+ </li>
52
+ </template>
53
+ <template id="session-parent-link">
54
+ <span data-session-parent><a data-text="name" data-bind="href:session-path"></a> &gt; </span>
55
+ </template>
56
+ <template id="session-parent-text">
57
+ <span data-session-parent><span></span> &gt; </span>
58
+ </template>
59
+ <template id="session-reply">
60
+ <div data-session-reply=""></div>
61
+ </template>
62
+ <!-- {§web-session-status} Public state supplies literal list values, not document markup. -->
63
+ <template id="session-descendant">
64
+ <li>
65
+ <a data-text="descendant-name" data-bind="href:descendant-path"></a>
66
+ <small><span data-text="descendant-kind"></span> <span data-i18n="descendant-separator">·</span> <span data-text="descendant-lifecycle"></span>
67
+ <span data-i18n="descendant-pending-gates">· Pending requests:</span> <span data-text="descendant-gates"></span></small>
68
+ </li>
69
+ </template>
70
+ <template id="session-descendant-children">
71
+ <details><summary><span data-i18n="descendant-children">Children:</span> <span data-text="descendant-children"></span></summary><ul></ul></details>
72
+ </template>
73
+ <!-- {§web-session-streams} Observed outcomes retain explicit output inspection. -->
74
+ <template id="session-stream-outcome">
75
+ <li>
76
+ <details>
77
+ <summary><code data-text="stream-target">Stream address</code> <span data-text="stream-scheme">Executor</span></summary>
78
+ <p><span data-i18n="stream-session">Session:</span> <span data-text="stream-session">Session</span></p>
79
+ <p data-text="stream-summary">Stream concluded.</p>
80
+ <p data-stream-exit-line><span data-i18n="stream-exit-code">Exit code:</span> <span data-text="stream-exit-code"></span></p>
81
+ <article data-stream-failure>
82
+ <header><span aria-hidden="true" data-i18n="stream-failed-icon">❌</span> <strong data-text="stream-problem-title">Stream failed</strong></header>
83
+ <p data-text="stream-problem">Failure details</p>
84
+ </article>
85
+ </details>
86
+ </li>
87
+ </template>
88
+ <template id="stream-output">
89
+ <section data-entry-output aria-label="Output snapshot">
90
+ <button type="button" data-action="read-output" data-bind="disabled:output-pending" data-i18n="read-output">Read output</button>
91
+ <p data-output-loading role="status" data-i18n="reading-output">Reading output…</p>
92
+ <article data-output-failure role="alert">
93
+ <header><span aria-hidden="true" data-i18n="output-warning">⚠️</span> <strong data-i18n="output-read-failed">Output read failed</strong></header>
94
+ <p data-text="output-error">The output could not be read.</p>
95
+ </article>
96
+ <div data-output-snapshot>
97
+ <p data-i18n="output-snapshot">Output snapshot; read again to refresh.</p>
98
+ <ul></ul>
99
+ </div>
100
+ </section>
101
+ </template>
102
+ <template id="stream-output-channel">
103
+ <li>
104
+ <details>
105
+ <summary><code data-text="output-channel">Channel</code> <span data-text="output-channel-state">State</span></summary>
106
+ <p><small data-text="output-mime">Content type</small></p>
107
+ <p><span data-i18n="output-offset">Offset (code points):</span> <span data-text="output-offset">0</span>
108
+ <span data-i18n="output-length">Length:</span> <span data-text="output-length">0</span></p>
109
+ <pre data-output-content></pre>
110
+ </details>
111
+ </li>
112
+ </template>
113
+ <template id="conversation-body-reference">
114
+ <pre data-body-reference data-bind="aria-busy:body-pending"></pre>
115
+ </template>
116
+ <template id="conversation-body-retry">
117
+ <form><button type="submit" data-i18n="retry-body">Retry</button></form>
118
+ </template>
119
+ <template id="conversation-body-read">
120
+ <form><button type="submit" data-i18n="read-body">Read</button></form>
121
+ </template>
122
+ <!-- {§web-session-diagnostics} Diagnostic values are text, never actions or conversation messages. -->
123
+ <template id="session-diagnostic">
124
+ <li>
125
+ <article data-bind="aria-label:diagnostic-label"></article>
126
+ </li>
127
+ </template>
128
+ <!-- {§web-session-activity} Observations are literal evidence, not replies or executable markup. -->
129
+ <template id="session-ambient">
130
+ <li>
131
+ <article data-bind="aria-label:activity-label"></article>
132
+ </li>
133
+ </template>
134
+ <template id="session-outside">
135
+ <li>
136
+ <article data-bind="aria-label:activity-label"></article>
137
+ </li>
138
+ </template>
139
+ <template id="activity-reasoning">
140
+ <details><summary data-i18n="activity-reasoning">Reasoning</summary></details>
141
+ </template>
142
+ <!-- {§web-session-input} Native form structure; the session SDK owns delivery. -->
143
+ <template id="session-controls">
144
+ <section aria-label="Session controls">
145
+ <form id="session-compose">
146
+ <fieldset role="group" aria-label="Session actions">
147
+ <button type="submit" form="session-stop" disabled data-bind="disabled:stop-unavailable" aria-label="Stop" title="Stop"></button>
148
+ <textarea id="session-message" name="message" aria-label="Message" rows="1" required></textarea>
149
+ <button type="submit" form="session-compose" disabled data-bind="disabled:send-unavailable" aria-label="Send" aria-keyshortcuts="Control+Enter" title="Send (Ctrl+Enter)"></button>
150
+ </fieldset>
151
+ </form>
152
+ <form id="session-stop"></form>
153
+ </section>
154
+ </template>
155
+ <template id="session-feedback">
156
+ <section aria-label="Message feedback" data-command-error="" data-message-status="">
157
+ <p role="status" data-text="message-status">Connect to send a message.</p>
158
+ <article role="alert" data-command-error>
159
+ <header><span aria-hidden="true" data-text="warning-icon">⚠️</span> <strong data-i18n="request-failed">Request failed</strong></header>
160
+ <p data-text="command-error">The request could not be confirmed.</p>
161
+ </article>
162
+ </section>
163
+ </template>
164
+ <!-- {§web-session-settings} Native disclosures and forms reuse the command action boundary. -->
165
+ <template id="model-settings">
166
+ <article id="session-model-settings" aria-label="Model selection" tabindex="-1" hidden>
167
+ <form data-setting="model" data-bind="aria-busy:settings-pending">
168
+ <input id="session-model-choice" type="search" name="selection" list="session-model-options" aria-label="Search Models" placeholder="Search Models" autocomplete="off" spellcheck="false" required data-bind="disabled:settings-pending">
169
+ <datalist id="session-model-options"></datalist>
170
+ <fieldset role="group">
171
+ <button type="button" data-cancel-settings data-bind="disabled:settings-pending" data-i18n="cancel">Cancel</button>
172
+ <button type="submit" data-bind="disabled:selection-unavailable" data-i18n="select-model">Select Model</button>
173
+ </fieldset>
174
+ </form>
175
+ <p role="status" data-text="settings-message"></p>
176
+ <p data-text="settings-recovery"></p>
177
+ </article>
178
+ </template>
179
+ <template id="effort-settings">
180
+ <article id="session-effort-settings" aria-label="Effort selection" tabindex="-1" hidden>
181
+ <form data-setting="effort" data-bind="aria-busy:settings-pending">
182
+ <select id="session-effort-choice" name="selection" aria-label="Reasoning Effort" required disabled data-bind="disabled:selection-unavailable">
183
+ <option value="" disabled selected data-i18n="reasoning-effort">Reasoning Effort</option>
184
+ </select>
185
+ <fieldset role="group">
186
+ <button type="button" data-cancel-settings data-bind="disabled:settings-pending" data-i18n="cancel">Cancel</button>
187
+ <button type="submit" disabled data-bind="disabled:selection-unavailable" data-i18n="select-effort">Select Effort</button>
188
+ </fieldset>
189
+ </form>
190
+ <p role="status" data-text="settings-message"></p>
191
+ <p data-text="settings-recovery"></p>
192
+ </article>
193
+ </template>
194
+ <template id="setting-option"><option data-bind="value:option-value disabled:option-disabled" data-text="option-label"></option></template>
195
+ <!-- {§web-session-commands} Command results are local presentation, not conversation messages. -->
196
+ <template id="command-results">
197
+ <section id="session-command-results" aria-label="Command results">
198
+ <ul></ul>
199
+ </section>
200
+ </template>
201
+ <template id="session-command-result">
202
+ <li>
203
+ <article data-command-state="pending" data-bind="aria-busy:command-busy">
204
+ <header><code></code></header>
205
+ <p role="status" data-text="command-message">Running…</p>
206
+ <div data-command-output></div>
207
+ <p data-text="command-recovery"></p>
208
+ </article>
209
+ </li>
210
+ </template>
211
+ <template id="command-help">
212
+ <ul aria-label="Supported commands">
213
+ <li data-command-name="help"><code data-i18n="command-help-usage">/help [command]</code> <span data-i18n="command-help-summary">Show these commands or one command's usage.</span></li>
214
+ <li data-command-name="models"><code data-i18n="command-models-usage">/models [search]</code> <span data-i18n="command-models-summary">List aliases and search the available model catalog.</span></li>
215
+ <li data-command-name="model"><code data-i18n="command-model-usage">/model [selector] [effort]</code> <span data-i18n="command-model-summary">Inspect or select this session's model.</span></li>
216
+ <li data-command-name="effort"><code data-i18n="command-effort-usage">/effort [policy]</code> <span data-i18n="command-effort-summary">Inspect or select this session's reasoning effort.</span></li>
217
+ <li data-command-name="capabilities"><code data-i18n="command-capabilities-usage">/capabilities [json]</code> <span data-i18n="command-capabilities-summary">Inspect or replace the workspace capability policy.</span></li>
218
+ <li data-command-name="yolo"><code data-i18n="command-yolo-usage">/yolo</code> <span data-i18n="command-yolo-summary">Toggle automatic approval on this page.</span></li>
219
+ <li data-command-name="stop"><code data-i18n="command-stop-usage">/stop</code> <span data-i18n="command-stop-summary">Request cancellation of this session's active work.</span></li>
220
+ </ul>
221
+ </template>
222
+ <template id="command-models">
223
+ <section aria-label="Available models">
224
+ <h2 data-i18n="model-aliases">Aliases</h2>
225
+ <p data-no-aliases data-i18n="no-aliases">No matching aliases.</p>
226
+ <ul data-model-aliases></ul>
227
+ <h2 data-i18n="model-catalog">Model catalog</h2>
228
+ <p>
229
+ <span data-i18n="model-offset">Offset:</span> <span data-text="model-offset">0</span>
230
+ <span data-i18n="models-shown">Shown:</span> <span data-text="model-count">0</span>
231
+ <span data-i18n="models-total">Total:</span> <span data-text="model-total">0</span>
232
+ </p>
233
+ <p data-text="model-more">Narrow the search for more matches.</p>
234
+ <figure>
235
+ <table>
236
+ <thead><tr>
237
+ <th scope="col" data-i18n="model-selector">Selector</th>
238
+ <th scope="col" data-i18n="model-name">Name</th>
239
+ <th scope="col" data-i18n="model-context">Context</th>
240
+ <th scope="col" data-i18n="model-efforts">Efforts</th>
241
+ <th scope="col" data-i18n="model-readiness">Readiness</th>
242
+ </tr></thead>
243
+ <tbody></tbody>
244
+ </table>
245
+ </figure>
246
+ </section>
247
+ </template>
248
+ <template id="command-alias">
249
+ <li>
250
+ <code data-text="alias-name">Alias</code>
251
+ <span data-text="alias-route">Provider/model</span>
252
+ <span data-text="alias-effort">Effort</span>
253
+ <span data-text="alias-active">Default</span>
254
+ </li>
255
+ </template>
256
+ <template id="command-model">
257
+ <tr>
258
+ <th scope="row"><code data-text="model-selector">Provider/model</code></th>
259
+ <td data-text="model-name">Model</td>
260
+ <td data-text="model-context">0</td>
261
+ <td data-text="model-efforts">Efforts</td>
262
+ <td data-text="model-readiness">Readiness</td>
263
+ </tr>
264
+ </template>
265
+ <template id="command-capabilities">
266
+ <dl>
267
+ <dt data-i18n="capability-service">Service</dt><dd><pre><code data-capability="service"></code></pre></dd>
268
+ <dt data-i18n="capability-workspace">Workspace</dt><dd><pre><code data-capability="workspace"></code></pre></dd>
269
+ <dt data-i18n="capability-effective">Effective</dt><dd><pre><code data-capability="effective"></code></pre></dd>
270
+ </dl>
271
+ </template>
272
+ <!-- {§web-session-approval} One explicit decision per operation, one complete resume. -->
273
+ <template id="session-review">
274
+ <form aria-label="Review requests" data-request-count="0">
275
+ <fieldset disabled data-bind="disabled:review-unavailable">
276
+ <legend data-i18n="input-required">Input required</legend>
277
+ <p role="alert" data-deadline-notice data-i18n="deadline-passed">The decision deadline has passed; the daemon cancels these requests.</p>
278
+ <div data-requests></div>
279
+ <button type="submit" data-i18n="submit-responses">Submit responses</button>
280
+ </fieldset>
281
+ </form>
282
+ </template>
283
+ <!-- {§web-session-questions} Request data never supplies markup or application bindings. -->
284
+ <template id="session-question">
285
+ <fieldset data-question data-response-error="">
286
+ <legend><span data-request-origin><span data-i18n="request-session">Session</span> <span data-text="request-session">Unknown</span></span> <code data-text="request-tool">Question</code></legend>
287
+ <p data-request-message></p>
288
+ <details>
289
+ <summary data-i18n="request-details">Request details</summary>
290
+ <pre><code data-request-arguments></code></pre>
291
+ </details>
292
+ <details>
293
+ <summary data-i18n="response-schema">Response schema</summary>
294
+ <pre><code data-request-schema></code></pre>
295
+ </details>
296
+ <label><input type="checkbox" data-answer-cancel> <span data-i18n="cancel-request">Cancel this request</span></label>
297
+ <fieldset data-answer-fields></fieldset>
298
+ <p role="alert" data-response-error data-text="response-error">Answer validation failed.</p>
299
+ </fieldset>
300
+ </template>
301
+ <template id="answer-field">
302
+ <fieldset>
303
+ <legend data-text="field-title">Answer field</legend>
304
+ <p data-text="field-description">Field description</p>
305
+ <label data-optional-answer><input type="checkbox" data-answer-include> <span data-i18n="include-answer">Include this answer</span></label>
306
+ <fieldset data-answer-value></fieldset>
307
+ </fieldset>
308
+ </template>
309
+ <template id="answer-text"><textarea rows="2" data-bind="aria-label:answer-label"></textarea></template>
310
+ <template id="answer-number"><input type="number" step="any" required data-bind="aria-label:answer-label"></template>
311
+ <template id="answer-boolean" data-otm-dynamic>
312
+ <select required data-bind="aria-label:answer-label"><option value="" data-i18n="choose-answer">Choose an answer</option><option value="true" data-i18n="yes">Yes</option><option value="false" data-i18n="no">No</option></select>
313
+ </template>
314
+ <template id="answer-select" data-otm-dynamic>
315
+ <select required data-bind="aria-label:answer-label"><option value="" data-i18n="choose-answer">Choose an answer</option></select>
316
+ </template>
317
+ <template id="answer-option"><option data-bind="value:option-value" data-text="option-label">Option</option></template>
318
+ <template id="answer-json"><label><span data-i18n="json-answer">Answer (JSON)</span><textarea rows="6" spellcheck="false" required></textarea></label></template>
319
+ <template id="session-proposal">
320
+ <fieldset>
321
+ <legend><span data-text="proposal-session">Session</span> <code data-text="proposal-op">Operation</code></legend>
322
+ <pre><code data-proposal-target></code></pre>
323
+ <pre><code data-proposal-body></code></pre>
324
+ <p data-proposal-deadline-line><span data-i18n="decide-by">Decide by</span> <time data-bind="datetime:proposal-deadline" data-text="proposal-deadline-label"></time></p>
325
+ <label><input type="radio" value="accept" required data-bind="name:proposal-choice"> <span data-i18n="accept">Accept</span></label>
326
+ <label><input type="radio" value="reject" required data-bind="name:proposal-choice"> <span data-i18n="reject">Reject</span></label>
327
+ </fieldset>
328
+ </template>
329
+ <!-- {§web-session-conversation} Inert document-owned structure; the ACP client supplies its values. -->
330
+ <template id="conversation-history">
331
+ <li data-history-boundary>
332
+ <form data-bind="aria-busy:history-pending">
333
+ <button type="submit" data-bind="disabled:history-pending" data-i18n="load-previous-loop">Load previous loop</button>
334
+ <p role="alert" data-text="history-error"></p>
335
+ </form>
336
+ </li>
337
+ </template>
338
+ <template id="session-reasoning-preview">
339
+ <article data-reasoning-preview aria-label="Live reasoning">
340
+ <header data-text="reasoning-coordinate"></header>
341
+ <pre></pre>
342
+ </article>
343
+ </template>
344
+ <template id="conversation-loop">
345
+ <li>
346
+ <details open>
347
+ <summary><span><span data-i18n="loop-heading">Loop</span> <span data-text="loop-seq">1</span></span></summary>
348
+ <ul></ul>
349
+ </details>
350
+ </li>
351
+ </template>
352
+ <template id="conversation-operations">
353
+ <li data-operations="">
354
+ <details>
355
+ <summary data-bind="aria-label:operations-label"><span></span></summary>
356
+ <ul></ul>
357
+ </details>
358
+ </li>
359
+ </template>
360
+ <template id="operation-tally">
361
+ <span data-operation-tally><span data-plurnk-field="heading"></span><span data-plurnk-field="count"></span></span>
362
+ </template>
363
+ <template id="conversation-plan">
364
+ <li data-loop-plan>
365
+ <article aria-label="Open tasks">
366
+ <ul></ul>
367
+ </article>
368
+ </li>
369
+ </template>
370
+ <template id="conversation-plan-item">
371
+ <li data-text="plan-item"></li>
372
+ </template>
373
+ <template id="prompt-replies">
374
+ <ul data-prompt-replies></ul>
375
+ </template>
376
+ <template id="conversation-message">
377
+ <li>
378
+ <article data-bind="aria-label:message-label"></article>
379
+ </li>
380
+ </template>
381
+ <!-- {§web-card-disclosure} Summary fields are phrasing content, not nested headers or paragraphs. -->
382
+ <template id="card-disclosure">
383
+ <details><summary></summary></details>
384
+ </template>
385
+ <template id="card-header">
386
+ <header></header>
387
+ </template>
388
+ <template id="conversation-literal">
389
+ <pre></pre>
390
+ </template>
391
+ <!-- {§web-operation-summary} Shared summary; the stylesheet owns operation glyphs. -->
392
+ <template id="operation-header">
393
+ <span data-plurnk-field="heading"></span>
394
+ </template>
395
+ <template id="operation-operands">
396
+ <span data-plurnk-operands></span>
397
+ </template>
398
+ <template id="operation-operand">
399
+ <span data-plurnk-operand></span>
400
+ </template>
401
+ <template id="operation-field">
402
+ <span></span>
403
+ </template>
404
+ <template id="operation-outcome">
405
+ <span data-plurnk-field="outcome"></span>
406
+ </template>
407
+ <!-- {§web-diagram-content} Only the generated data-URI image enters this template. -->
408
+ <template id="diagram-retry">
409
+ <button type="button" data-diagram-retry data-i18n="diagram-retry">Retry diagram</button>
410
+ </template>
411
+ <template id="conversation-diagram">
412
+ <figure data-diagram hidden>
413
+ <div data-diagram-viewport><img alt="Mermaid diagram; source below."></div>
414
+ <details>
415
+ <summary data-i18n="diagram-source">Diagram source</summary>
416
+ <pre><code data-diagram-source></code></pre>
417
+ </details>
418
+ </figure>
419
+ </template>
420
+ </body>
421
+ </html>
@@ -0,0 +1,27 @@
1
+ {
2
+ "id": "/",
3
+ "name": "Plurnk",
4
+ "short_name": "Plurnk",
5
+ "description": "Plurnk agent workspace.",
6
+ "lang": "en",
7
+ "dir": "ltr",
8
+ "start_url": "/",
9
+ "scope": "/",
10
+ "display": "standalone",
11
+ "theme_color": "#148800",
12
+ "background_color": "#ffffff",
13
+ "icons": [
14
+ {
15
+ "src": "/icons/plurnk.svg",
16
+ "sizes": "any",
17
+ "type": "image/svg+xml",
18
+ "purpose": "any"
19
+ },
20
+ {
21
+ "src": "/icons/plurnk-maskable.svg",
22
+ "sizes": "any",
23
+ "type": "image/svg+xml",
24
+ "purpose": "maskable"
25
+ }
26
+ ]
27
+ }
@@ -0,0 +1,25 @@
1
+ @cfworker/json-schema 4.1.1
2
+ The npm artifact omits this notice; retained from its published git revision:
3
+ https://github.com/cfworker/cfworker/blob/5409fdc2bd144f68e8b28c61c71fcb16600000a6/LICENSE.md
4
+
5
+ MIT License
6
+
7
+ Copyright (c) 2020 Jeremy Danyow
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.