dorkos 0.92.0 → 0.94.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 (95) hide show
  1. package/core-extensions/hello-world/index.ts +69 -4
  2. package/dist/bin/cli.js +3617 -959
  3. package/dist/client/assets/{AboutPage-CtAhGJVI.js → AboutPage-ESdr5ej6.js} +1 -1
  4. package/dist/client/assets/{AdapterIcon-DTXuj6Zu.js → AdapterIcon-C2oG4Wi0.js} +1 -1
  5. package/dist/client/assets/{AppearancePage-EJF8LarY.js → AppearancePage-BkLDttbk.js} +1 -1
  6. package/dist/client/assets/{BaseTanStackRouterDevtoolsPanel-B-iktbLX-COy_dBa2.js → BaseTanStackRouterDevtoolsPanel-B-iktbLX-DrUBXr8b.js} +24 -24
  7. package/dist/client/assets/{BlintzCanvas-Bb84mtl-.js → BlintzCanvas-BqJDhl-U.js} +1 -1
  8. package/dist/client/assets/{CanvasCsvContent-D1y22lqg.js → CanvasCsvContent-DAsWhu2A.js} +1 -1
  9. package/dist/client/assets/{CanvasFileContent-CbOnIUPF.js → CanvasFileContent-CFpGh9lB.js} +2 -2
  10. package/dist/client/assets/{CanvasModel3dContent-Bv86PZ-y.js → CanvasModel3dContent-DorTDn1y.js} +2 -2
  11. package/dist/client/assets/{CodeMirrorDiff-CXqMnztG.js → CodeMirrorDiff-ChMTPEBY.js} +1 -1
  12. package/dist/client/assets/{CodeMirrorEditor-DHSY565t.js → CodeMirrorEditor-DtYzxmC5.js} +1 -1
  13. package/dist/client/assets/{ConnectionAccessLists-D5Qo1i-D.js → ConnectionAccessLists-DnxFiJIp.js} +1 -1
  14. package/dist/client/assets/{ConnectionsPage-DFvJRdx7.js → ConnectionsPage-Exq_5IiP.js} +2 -2
  15. package/dist/client/assets/ConventionPage-DXnlTX8j.js +11 -0
  16. package/dist/client/assets/{FloatingTanStackRouterDevtools-CqogiFob-BDQA6n2J.js → FloatingTanStackRouterDevtools-CqogiFob-CEzhHBdz.js} +1 -1
  17. package/dist/client/assets/HandlePage-C1AzkGxs.js +1 -0
  18. package/dist/client/assets/{LexicalField-a7Ov2ETq.js → LexicalField-DJfTqKnT.js} +1 -1
  19. package/dist/client/assets/{ManagesPage-Czapr6qD.js → ManagesPage-BAYoqzuu.js} +1 -1
  20. package/dist/client/assets/{Model3dViewer-C_lFbWIi.js → Model3dViewer-DgKQPqJb.js} +1 -1
  21. package/dist/client/assets/NamePage-BDAAuJFs.js +1 -0
  22. package/dist/client/assets/{NotificationsPage-CdQCyMJk.js → NotificationsPage-CrGzgL1F.js} +1 -1
  23. package/dist/client/assets/{PermissionsPage-DLT-RkUE.js → PermissionsPage-CRq4hxB-.js} +1 -1
  24. package/dist/client/assets/{PersonalityPopover-BeOdD7eK.js → PersonalityPopover-CoJNGa7f.js} +1 -1
  25. package/dist/client/assets/PhotoPage-DFLk5ALL.js +1 -0
  26. package/dist/client/assets/{RoomsPage-CuZJdN_k.js → RoomsPage-DfJvCi90.js} +1 -1
  27. package/dist/client/assets/{RunsOnPopover-DspQEAdG.js → RunsOnPopover-UixmCBm5.js} +1 -1
  28. package/dist/client/assets/{SessionsPage-Ctwlg7GN.js → SessionsPage-D8BzdYL7.js} +2 -2
  29. package/dist/client/assets/{SkillsPage-DJdFnWfL.js → SkillsPage-B6yHwhAp.js} +1 -1
  30. package/dist/client/assets/{TasksPage-9jCfZB7f.js → TasksPage-KFUMW7h0.js} +1 -1
  31. package/dist/client/assets/{ToolsPage-W7zK5P0s.js → ToolsPage-Dd7DXlpE.js} +2 -2
  32. package/dist/client/assets/{TopologyGraph-CQga4Nuw.js → TopologyGraph-CJj2myGV.js} +5 -5
  33. package/dist/client/assets/{agent-browser-CoSmBP5N.js → agent-browser-C48rts1h.js} +1 -1
  34. package/dist/client/assets/{highlighted-body-KPVGNVTW-Bq_O6Zlj.js → highlighted-body-KPVGNVTW-CvHOdigG.js} +1 -1
  35. package/dist/client/assets/{index-DT9R_NnS.js → index-1tkVhrNa.js} +1 -1
  36. package/dist/client/assets/{index-Bj32H2Xz.js → index-3nUBnton.js} +3 -3
  37. package/dist/client/assets/{index-nztBriGg.js → index-672L_-Ce.js} +3 -3
  38. package/dist/client/assets/{index-D4nkiaT7.js → index-9lsrtJLf.js} +1 -1
  39. package/dist/client/assets/{index-THAVeZRE.js → index-B1N7_mWs.js} +1 -1
  40. package/dist/client/assets/index-B4Z9VBPe.js +1678 -0
  41. package/dist/client/assets/{index-DrD7x9EL.js → index-BK5zyBqg.js} +1 -1
  42. package/dist/client/assets/{index-Bat0bq64.js → index-BNO2TT-L.js} +1 -1
  43. package/dist/client/assets/{index-ULWpcSAZ.js → index-BSj4LDYi.js} +1 -1
  44. package/dist/client/assets/{index-cNE108-h.js → index-B_0gazbk.js} +1 -1
  45. package/dist/client/assets/{index-E7ZNee_E.js → index-BgBnbdck.js} +1 -1
  46. package/dist/client/assets/{index-CKY7hz-9.js → index-BhxMJfLU.js} +1 -1
  47. package/dist/client/assets/{index-B4oYDFdX.js → index-BlNzH0bV.js} +1 -1
  48. package/dist/client/assets/{index-Dx0uYGgf.js → index-BmYSSGWx.js} +1 -1
  49. package/dist/client/assets/{index-DcwZU98u.js → index-Brd8Hs2R.js} +1 -1
  50. package/dist/client/assets/{index-OidZkt6z.js → index-Bu5-0YcT.js} +1 -1
  51. package/dist/client/assets/{index-EmzeTf1X.js → index-C0YR9sBs.js} +1 -1
  52. package/dist/client/assets/{index-CmQbhXN6.js → index-CEQe58ON.js} +1 -1
  53. package/dist/client/assets/{index-DCmzSFWM.js → index-CEU2IWuT.js} +1 -1
  54. package/dist/client/assets/{index-BuAy0fEx.js → index-CMKnOlvn.js} +1 -1
  55. package/dist/client/assets/index-CMlp38oa.js +1 -0
  56. package/dist/client/assets/{index-CFdScmIU.js → index-CNPnwL--.js} +1 -1
  57. package/dist/client/assets/index-Clh_1xLD.js +1 -0
  58. package/dist/client/assets/{index-BiqiwP26.js → index-CpAbafE9.js} +4 -4
  59. package/dist/client/assets/{index-B7fRxuTQ.js → index-CpFgghxb.js} +1 -1
  60. package/dist/client/assets/{index-BI051zYq.js → index-Cum2QlPd.js} +2 -2
  61. package/dist/client/assets/index-D8mgsoST.css +1 -0
  62. package/dist/client/assets/{index-CpCOMkMm.js → index-DDGf-Mnk.js} +1 -1
  63. package/dist/client/assets/{index-DV_54TKu.js → index-DEuOFjz7.js} +1 -1
  64. package/dist/client/assets/{index-BfoOBbWz.js → index-DSDJttSW.js} +1 -1
  65. package/dist/client/assets/{index-ahTVwxpJ.js → index-DmA6ple3.js} +1 -1
  66. package/dist/client/assets/{index-Bn-vRpKY.js → index-DrkFww9Q.js} +1 -1
  67. package/dist/client/assets/{index-7AN8MIhq.js → index-O5pHJ17K.js} +1 -1
  68. package/dist/client/assets/{index-9RHYMIP_.js → index-PA-V6bdB.js} +1 -1
  69. package/dist/client/assets/{index-CdNENSm7.js → index-XMua1laL.js} +1 -1
  70. package/dist/client/assets/{index-CIPmtIuV.js → index-ZBeb8ExW.js} +1 -1
  71. package/dist/client/assets/{index-BBMfKdj-.js → index-ngTGZK5T.js} +1 -1
  72. package/dist/client/assets/{room-files-source-CMj0pEdy.js → room-files-source-CWB8LgHN.js} +2 -2
  73. package/dist/client/assets/{soul-file-C_AT0A8U.js → soul-file-BTDnNMG7.js} +1 -1
  74. package/dist/client/assets/{use-personality-commit-ClM-Ahk5.js → use-personality-commit-CzT0Fy-T.js} +1 -1
  75. package/dist/client/index.html +2 -2
  76. package/dist/drizzle/0132_connection_access_levels.sql +84 -0
  77. package/dist/drizzle/0134_query_indexes.sql +8 -0
  78. package/dist/drizzle/0135_session_started_by.sql +13 -0
  79. package/dist/drizzle/0136_mirror_timeline_order.sql +23 -0
  80. package/dist/drizzle/meta/0132_snapshot.json +10075 -0
  81. package/dist/drizzle/meta/0134_snapshot.json +10095 -0
  82. package/dist/drizzle/meta/0135_snapshot.json +10176 -0
  83. package/dist/drizzle/meta/0136_snapshot.json +10232 -0
  84. package/dist/drizzle/meta/_journal.json +28 -0
  85. package/dist/server/index.js +20889 -14309
  86. package/dist/server/index.js.map +2 -2
  87. package/package.json +8 -6
  88. package/dist/client/assets/ConventionPage-fMfStY8d.js +0 -11
  89. package/dist/client/assets/HandlePage-8Gv3fBBC.js +0 -1
  90. package/dist/client/assets/NamePage-CrZUfKVe.js +0 -1
  91. package/dist/client/assets/PhotoPage-C2mHVHvV.js +0 -1
  92. package/dist/client/assets/index-B0qJNUoh.css +0 -1
  93. package/dist/client/assets/index-CtxpF7aO.js +0 -1
  94. package/dist/client/assets/index-N8BCc19i.js +0 -1
  95. package/dist/client/assets/index-bYhLX3oQ.js +0 -1669
@@ -1,5 +1,7 @@
1
1
  import type { ExtensionAPI, ExtensionPageProps, StatusBarSlotContext } from '@dorkos/extension-api';
2
2
 
3
+ // React is provided by the host as a global — do not import it.
4
+
3
5
  /**
4
6
  * Hello World extension — demonstrates the extension API.
5
7
  *
@@ -8,7 +10,8 @@ import type { ExtensionAPI, ExtensionPageProps, StatusBarSlotContext } from '@do
8
10
  * - a section on the Activity tab,
9
11
  * - a command palette item that says hello, and one that marks its tab,
10
12
  * - a page at `/x/hello-world`, listed in the command palette and the phone's
11
- * "Add-ons" menu,
13
+ * "Add-ons" menu, with a "Start a chat" button that starts work in a new
14
+ * chat and leaves the current one alone,
12
15
  * - an item in the chat status bar, shown only when the chat has a folder,
13
16
  * - a tab in the right panel, which its command marks with a dot.
14
17
  *
@@ -34,8 +37,10 @@ export function activate(api: ExtensionAPI): () => void {
34
37
  { icon: 'hand-metal' }
35
38
  );
36
39
 
37
- // A full page at /x/hello-world. The empty path is the extension's home.
38
- const unregisterPage = api.registerPage('', HelloPage, { title: 'Hello' });
40
+ // A full page at /x/hello-world. The empty path is the extension's home. The
41
+ // page needs `api` for its button, so it is bound here.
42
+ const Page = (props: ExtensionPageProps) => <HelloPage {...props} api={api} />;
43
+ const unregisterPage = api.registerPage('', Page, { title: 'Hello' });
39
44
 
40
45
  // An item in the chat status bar. `when` reads only its `ctx` argument: it
41
46
  // runs while the status bar decides what fits, so it must never fetch or
@@ -107,7 +112,7 @@ function HelloSection() {
107
112
  }
108
113
 
109
114
  /** The extension's page. Core gives it the whole content area and scrolls it. */
110
- function HelloPage({ search, setSearch }: ExtensionPageProps) {
115
+ function HelloPage({ search, setSearch, api }: ExtensionPageProps & { api: ExtensionAPI }) {
111
116
  const name = search.name ?? 'there';
112
117
  return (
113
118
  <div style={{ maxWidth: '40rem', margin: '0 auto', padding: '24px 16px' }}>
@@ -124,10 +129,70 @@ function HelloPage({ search, setSearch }: ExtensionPageProps) {
124
129
  style={{ display: 'block', marginTop: '4px', width: '100%', maxWidth: '20rem', padding: '6px 8px', border: '1px solid var(--border)', borderRadius: '8px', background: 'transparent', color: 'inherit', fontSize: '14px' }}
125
130
  />
126
131
  </label>
132
+ <StartChat api={api} />
127
133
  </div>
128
134
  );
129
135
  }
130
136
 
137
+ /**
138
+ * An outcome button (spec `flow-multiproject` V7): one click starts the work in
139
+ * a NEW chat in the current project, and the button turns into "Saying hello… ·
140
+ * Watch". Nothing navigates, and the chat you were in keeps what you typed.
141
+ */
142
+ function StartChat({ api }: { api: ExtensionAPI }) {
143
+ const [started, setStarted] = React.useState<string | null>(null);
144
+ const [problem, setProblem] = React.useState<string | null>(null);
145
+ const [busy, setBusy] = React.useState(false);
146
+ // The project of the folder the app is in, kept current: it is null while
147
+ // the folder is still being resolved.
148
+ const [project, setProject] = React.useState(() => api.getState().currentProject);
149
+ React.useEffect(
150
+ () => api.subscribe((state) => state.currentProject, (next) => setProject(next)),
151
+ []
152
+ );
153
+
154
+ const start = async () => {
155
+ if (!project) return;
156
+ setBusy(true);
157
+ setProblem(null);
158
+ try {
159
+ const { sessionId } = await api.startWork({
160
+ project: project.root,
161
+ prompt: 'Say hello, in one short sentence, then stop.',
162
+ title: `Saying hello in ${project.name}`,
163
+ reason: 'You asked for a hello from the Hello page',
164
+ });
165
+ setStarted(sessionId);
166
+ } catch (err) {
167
+ // `err.code` says which rule refused it; the message is already plain words.
168
+ setProblem(err instanceof Error ? err.message : 'The chat could not be started.');
169
+ } finally {
170
+ setBusy(false);
171
+ }
172
+ };
173
+
174
+ const button = { padding: '6px 12px', border: '1px solid var(--border)', borderRadius: '8px', background: 'transparent', color: 'inherit', fontSize: '13px', cursor: 'pointer' };
175
+ return (
176
+ <section style={{ marginTop: '24px' }}>
177
+ {started ? (
178
+ <p style={{ margin: 0, fontSize: '13px' }}>
179
+ Saying hello…{' · '}
180
+ <button type="button" style={{ ...button, padding: '2px 8px' }} onClick={() => api.navigate(`/session?session=${encodeURIComponent(started)}`)}>
181
+ Watch
182
+ </button>
183
+ </p>
184
+ ) : (
185
+ <button type="button" style={button} disabled={!project || busy} onClick={() => void start()}>
186
+ Start a chat
187
+ </button>
188
+ )}
189
+ <p style={{ margin: '8px 0 0', fontSize: '12px', color: MUTED }}>
190
+ {problem ?? (project ? `A new chat in ${project.name} says hello. This page stays as it is.` : 'Open a chat in one of your projects first, then come back.')}
191
+ </p>
192
+ </section>
193
+ );
194
+ }
195
+
131
196
  /** The status-bar item: short on a phone, with the project's name when there is room. */
132
197
  function HelloStatusItem({ project, compact }: StatusBarSlotContext) {
133
198
  return (