@somewhere-tech/cli 0.37.4 → 0.37.6

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.
@@ -27,7 +27,7 @@ export function registerInit(program) {
27
27
  .option('--project <ref>', 'Existing project ID, name, slug, or subdomain (requires --link)')
28
28
  .option('--bare', 'Create and link only: no starter source or dependencies (AGENTS.md/CLAUDE.md are still added when absent)')
29
29
  .option('--template <name>', 'Starter to write: auth (default, cookie sign-in) or minimal (no sign-in)', 'auth')
30
- .option('--features <ids>', 'Generate selected modules into an empty directory, comma-separated: auth, private-data (see --catalog)')
30
+ .option('--features <ids>', 'Generate selected modules into an empty directory, comma-separated: auth, private-data, agent (see --catalog)')
31
31
  .option('--ui <mode>', 'With --features: styled (default; src/ui + design tokens) or headless (hooks and plain markup)')
32
32
  .option('--catalog', 'Print the module catalog for --features and exit; no login, project or files')
33
33
  .option('--dry-run', 'With --features: validate the selection and print the file plan; nothing is created')
@@ -45,7 +45,7 @@ export function registerInit(program) {
45
45
  + ' somewhere init --catalog --json\n'
46
46
  + ' somewhere init --name my-app --features private-data --dry-run --json\n'
47
47
  + ' somewhere init --name my-app --features auth,private-data --ui styled\n'
48
- + 'Requirements are added and reported (private-data adds auth). --features only\n'
48
+ + 'Requirements are added and reported (private-data and agent add auth). --features only\n'
49
49
  + 'writes into an empty directory and is checked before the project is created.\n')
50
50
  .action(async (opts, command) => {
51
51
  const dir = process.cwd();
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ const PACKAGE_JSON = `{
9
9
  "typecheck": "somewhere typecheck"
10
10
  },
11
11
  "dependencies": {
12
- "@somewhere-tech/sdk": "0.11.1",
12
+ "@somewhere-tech/sdk": "0.11.3",
13
13
  "react": "19.2.7",
14
14
  "react-dom": "19.2.7"
15
15
  },
@@ -322,8 +322,10 @@ function PrivateRoutes({ user }: { user: User }) {
322
322
  }
323
323
  }
324
324
  `;
325
- function mainTsx(styled) {
325
+ function mainTsx(styled, agent) {
326
326
  const styles = styled ? `import './styles/tokens.css';\nimport './styles/app.css';\n` : '';
327
+ if (agent)
328
+ return mainTsxWithFixtures(styles);
327
329
  return `import { StrictMode } from 'react';
328
330
  import { createRoot } from 'react-dom/client';
329
331
  import { SomewhereAuthProvider } from '@somewhere-tech/sdk/react';
@@ -339,6 +341,34 @@ createRoot(document.getElementById('root')!).render(
339
341
  );
340
342
  `;
341
343
  }
344
+ // /fixtures is decided before the sign-in provider mounts: the provider checks
345
+ // the session on mount, and a fixture preview must send no request at all.
346
+ function mainTsxWithFixtures(styles) {
347
+ return `import { StrictMode } from 'react';
348
+ import { createRoot } from 'react-dom/client';
349
+ import { SomewhereAuthProvider } from '@somewhere-tech/sdk/react';
350
+ import { App } from './App';
351
+ import { FIXTURES_PATH } from './fixtures/assistant';
352
+ import { AssistantFixturesPage } from './pages/AssistantFixturesPage';
353
+ import { auth } from './services/auth';
354
+ ${styles}
355
+ // /fixtures renders declared preview states from static data, outside the
356
+ // sign-in provider, so it sends no request. Everything else is the app.
357
+ const preview = window.location.pathname === FIXTURES_PATH;
358
+
359
+ createRoot(document.getElementById('root')!).render(
360
+ <StrictMode>
361
+ {preview ? (
362
+ <AssistantFixturesPage />
363
+ ) : (
364
+ <SomewhereAuthProvider client={auth}>
365
+ <App />
366
+ </SomewhereAuthProvider>
367
+ )}
368
+ </StrictMode>,
369
+ );
370
+ `;
371
+ }
342
372
  function configTs(appName) {
343
373
  return `// Shown in the header and on the sign-in page; index.html holds the tab title.
344
374
  export const APP_NAME = ${JSON.stringify(appName)};
@@ -654,6 +684,767 @@ export function useNotes(): NotesController {
654
684
  };
655
685
  }
656
686
  `;
687
+ // -------------------------------------------------------------- agent: backend
688
+ const AGENT_TABLES = ` // The effect. Only api/proposals.ts writes tasks, after the owner approves.
689
+ tasks: table(
690
+ { id: id(), title: text(), created_at: timestamp({ default: 'now' }) },
691
+ { scope: owner() },
692
+ ),
693
+ // What the assistant may do instead: draft and wait. tool_call_id is unique,
694
+ // so a repeated tool call with the same id leaves one proposal.
695
+ proposals: table(
696
+ {
697
+ id: id(),
698
+ tool_call_id: text({ unique: true }),
699
+ title: text(),
700
+ status: text({ default: 'pending' }), // pending | approved | rejected
701
+ created_at: timestamp({ default: 'now' }),
702
+ },
703
+ { scope: owner(), indexes: [['status']] },
704
+ ),
705
+ `;
706
+ const AGENT_SCHEMA_NOTE = `// tasks, proposals: owner() scopes every structured call in api/chat.ts and
707
+ // api/proposals.ts to the signed-in caller. They have no client block, so the
708
+ // browser reaches them only through those two functions.
709
+ `;
710
+ function schemaTs(privateData, agent) {
711
+ if (!agent)
712
+ return SCHEMA;
713
+ const imports = `import { id, owner, schema, table, text, timestamp } from 'somewhere/db';\n\n`;
714
+ if (!privateData)
715
+ return imports + AGENT_SCHEMA_NOTE + 'export default schema({\n' + AGENT_TABLES + '});\n';
716
+ const notes = SCHEMA.slice(SCHEMA.indexOf('// notes:'));
717
+ return imports + AGENT_SCHEMA_NOTE + notes.replace(/\n\}\);\n$/, '\n' + AGENT_TABLES + '});\n');
718
+ }
719
+ const CHAT_API = `// api/chat.ts — one assistant conversation per signed-in person.
720
+ //
721
+ // GET /api/chat → { messages: [{ role, text }] } the saved transcript
722
+ // POST /api/chat { message } → { reply, completion_reason, activity, spent_cents }
723
+ //
724
+ // The run is inline (sw.agent.run): it finishes inside this request, bounded by
725
+ // maxSteps and maxSpendCents. There is no agent id and nothing to cancel; see
726
+ // README.md before turning it into a durable sw.agent.start run.
727
+
728
+ // Every signed-in person gets their own conversation under this one name: the
729
+ // platform keys stored history by the verified user, so two people sending the
730
+ // same id never see each other's turns.
731
+ const CONVERSATION = 'assistant';
732
+
733
+ const SYSTEM = [
734
+ 'You help one person keep a short task list.',
735
+ 'Call list_tasks before answering questions about their tasks.',
736
+ 'You cannot add tasks. To suggest one, call propose_task; the person approves or rejects it in the page.',
737
+ 'After proposing, say plainly that it is waiting for their approval.',
738
+ ].join(' ');
739
+
740
+ type Activity = { tool: string; tool_call_id: string; ok: boolean; detail: string };
741
+
742
+ function textOf(content: unknown): string {
743
+ if (typeof content === 'string') return content;
744
+ if (!Array.isArray(content)) return '';
745
+ return content
746
+ .map((block) => (block && typeof block === 'object' && 'type' in block && block.type === 'text'
747
+ && 'text' in block && typeof block.text === 'string' ? block.text : ''))
748
+ .join('');
749
+ }
750
+
751
+ async function transcript(sw: SomewhereRuntimeContext): Promise<Response> {
752
+ // Stored conversations are listed by their own id; ours is the one whose
753
+ // client id is CONVERSATION. Both calls are scoped to the signed-in caller.
754
+ const { conversations } = await sw.ai.conversations.list({ limit: 20 });
755
+ const mine = conversations.find((c) => c.client_conversation_id === CONVERSATION);
756
+ if (!mine) return Response.json({ messages: [] });
757
+ const conversation = await sw.ai.conversations.get(mine.id);
758
+ const messages = conversation.messages
759
+ .filter((m) => m.role === 'user' || m.role === 'assistant')
760
+ .map((m) => ({ role: m.role, text: textOf(m.content) }))
761
+ .filter((m) => m.text.trim() !== ''); // tool calls and results carry no text
762
+ return Response.json({ messages });
763
+ }
764
+
765
+ export default async (req: Request, sw: SomewhereRuntimeContext): Promise<Response> => {
766
+ await sw.auth.requireUser(req); // 401 AUTH_REQUIRED before a model call or read
767
+ if (req.method === 'GET') return transcript(sw);
768
+ if (req.method !== 'POST') return new Response('Method not allowed', { status: 405 });
769
+
770
+ let body: unknown;
771
+ try { body = await req.json(); } catch { return Response.json({ error: 'INVALID_JSON' }, { status: 400 }); }
772
+ const message = body && typeof body === 'object' && 'message' in body && typeof body.message === 'string'
773
+ ? body.message.trim() : '';
774
+ if (!message || message.length > 2000) {
775
+ return Response.json({ error: 'VALIDATION_ERROR', message: 'Send a message of 1–2000 characters.' }, { status: 400 });
776
+ }
777
+
778
+ const activity: Activity[] = [];
779
+ try {
780
+ const result = await sw.agent.run({
781
+ conversation_id: CONVERSATION,
782
+ messages: [{ role: 'user', content: message }],
783
+ system: SYSTEM,
784
+ maxSteps: 4,
785
+ // Checked between billed calls: one call can cross it, and a step whose
786
+ // cost is still unknown ends the run with completion_reason 'cost_pending'.
787
+ maxSpendCents: 10,
788
+ tools: {
789
+ list_tasks: {
790
+ description: 'List this person’s tasks, newest first.',
791
+ inputSchema: { type: 'object', properties: {} },
792
+ execute: async (_input, { toolCallId }) => {
793
+ // owner(): returns only the signed-in caller's rows.
794
+ const { data } = await sw.db.from('tasks', {
795
+ columns: ['id', 'title'], order: [['created_at', 'desc']], limit: 50,
796
+ });
797
+ activity.push({ tool: 'list_tasks', tool_call_id: toolCallId, ok: true, detail: \`\${data.length} task(s)\` });
798
+ return data;
799
+ },
800
+ },
801
+ propose_task: {
802
+ description: 'Suggest one new task. It is NOT added until the person approves it.',
803
+ inputSchema: {
804
+ type: 'object',
805
+ properties: { title: { type: 'string', description: 'Short task title' } },
806
+ required: ['title'],
807
+ },
808
+ execute: async (input, { toolCallId }) => {
809
+ const title = typeof input.title === 'string' ? input.title.trim().slice(0, 200) : '';
810
+ if (!title) {
811
+ activity.push({ tool: 'propose_task', tool_call_id: toolCallId, ok: false, detail: 'missing title' });
812
+ throw new Error('title is required');
813
+ }
814
+ // Drafting is the only write the model can cause. toolCallId is the
815
+ // dedupe key: the same call id twice leaves one proposal.
816
+ await sw.db.insert('proposals', { tool_call_id: toolCallId, title }, { onConflict: 'ignore' });
817
+ activity.push({ tool: 'propose_task', tool_call_id: toolCallId, ok: true, detail: title });
818
+ return { status: 'waiting_for_approval', title };
819
+ },
820
+ },
821
+ },
822
+ });
823
+ return Response.json({
824
+ reply: result.text ?? '',
825
+ completion_reason: result.completion_reason,
826
+ activity,
827
+ // Non-enumerable on the result, so read it directly. null = not known yet.
828
+ spent_cents: result.total_cost_cents,
829
+ });
830
+ } catch (error) {
831
+ const code = error && typeof error === 'object' && 'code' in error ? String(error.code) : '';
832
+ if (code === 'AI_SPEND_CAP_EXCEEDED') {
833
+ return Response.json({
834
+ error: code,
835
+ message: 'This reply hit its spending limit and stopped. Anything listed under activity already happened.',
836
+ activity,
837
+ }, { status: 402 });
838
+ }
839
+ throw error;
840
+ }
841
+ };
842
+ `;
843
+ const PROPOSALS_API = `// api/proposals.ts — the human approval step, and the only path to the effect.
844
+ //
845
+ // GET /api/proposals → { proposals: pending[], tasks: [] }
846
+ // POST /api/proposals { id, decision: 'approve' | 'reject' } → { proposal, task? }
847
+ //
848
+ // The assistant can only draft (api/chat.ts). A task row exists because the
849
+ // signed-in owner sent this POST, never because a model said so.
850
+ //
851
+ // Approving and creating the task are two writes, not one transaction. The
852
+ // approval is claimed first and is never reopened: if the task write fails or
853
+ // its outcome is unknown, the answer is 500 TASK_CREATION_UNCONFIRMED and the
854
+ // person checks their task list instead of approving again.
855
+
856
+ export default async (req: Request, sw: SomewhereRuntimeContext): Promise<Response> => {
857
+ await sw.auth.requireUser(req);
858
+
859
+ if (req.method === 'GET') {
860
+ const [proposals, tasks] = await Promise.all([
861
+ sw.db.from('proposals', {
862
+ columns: ['id', 'title', 'created_at'], where: { status: 'pending' },
863
+ order: [['created_at', 'asc']], limit: 20,
864
+ }),
865
+ sw.db.from('tasks', { columns: ['id', 'title'], order: [['created_at', 'desc']], limit: 50 }),
866
+ ]);
867
+ return Response.json({ proposals: proposals.data, tasks: tasks.data });
868
+ }
869
+ if (req.method !== 'POST') return new Response('Method not allowed', { status: 405 });
870
+
871
+ let body: unknown;
872
+ try { body = await req.json(); } catch { return Response.json({ error: 'INVALID_JSON' }, { status: 400 }); }
873
+ const id = body && typeof body === 'object' && 'id' in body ? Number(body.id) : NaN;
874
+ const decision = body && typeof body === 'object' && 'decision' in body ? body.decision : null;
875
+ if (!Number.isInteger(id) || (decision !== 'approve' && decision !== 'reject')) {
876
+ return Response.json({ error: 'VALIDATION_ERROR', message: 'Send { id, decision: "approve" | "reject" }.' }, { status: 400 });
877
+ }
878
+
879
+ // Claim the decision first. The status guard makes a double click, a second
880
+ // tab, a retry, or another person's id (owner scope) a zero-change 409, so
881
+ // the task below is attempted at most once per proposal.
882
+ const claimed = await sw.db.update('proposals', {
883
+ set: { status: decision === 'approve' ? 'approved' : 'rejected' },
884
+ where: { id, status: 'pending' },
885
+ });
886
+ const proposal = claimed.data[0];
887
+ if (claimed.changes === 0 || !proposal) {
888
+ return Response.json({ error: 'NOT_PENDING', message: 'That proposal is gone or already decided.' }, { status: 409 });
889
+ }
890
+ if (decision === 'reject') return Response.json({ proposal });
891
+
892
+ try {
893
+ const made = await sw.db.insert('tasks', { title: String(proposal.title) });
894
+ return Response.json({ proposal, task: made.data[0] ?? null });
895
+ } catch {
896
+ // The write may have committed before the error reached us, so the
897
+ // proposal stays approved: reopening it could create the task twice.
898
+ return Response.json({
899
+ error: 'TASK_CREATION_UNCONFIRMED',
900
+ message: 'Your approval was recorded, but the task could not be confirmed. Refresh your task list; if it is missing, ask the assistant to propose it again.',
901
+ proposal,
902
+ }, { status: 500 });
903
+ }
904
+ };
905
+ `;
906
+ // ------------------------------------------------------------- agent: frontend
907
+ const ASSISTANT_TYPES = `export type ChatRole = 'user' | 'assistant';
908
+
909
+ export interface ChatMessage {
910
+ role: ChatRole;
911
+ text: string;
912
+ }
913
+
914
+ /** One tool call from the last reply, as api/chat.ts reports it. */
915
+ export interface ToolActivity {
916
+ tool: string;
917
+ tool_call_id: string;
918
+ ok: boolean;
919
+ detail: string;
920
+ }
921
+
922
+ /** A task the assistant drafted; it becomes a task only after approval. */
923
+ export interface Proposal {
924
+ id: number | string;
925
+ title: string;
926
+ }
927
+
928
+ export interface AgentTask {
929
+ id: number | string;
930
+ title: string;
931
+ }
932
+
933
+ export type ProposalDecision = 'approve' | 'reject';
934
+
935
+ /** api/chat.ts POST answer. \`spent_cents\` is null while the cost is not known yet. */
936
+ export interface ChatReply {
937
+ reply: string;
938
+ completion_reason: string;
939
+ activity: ToolActivity[];
940
+ spent_cents: number | null;
941
+ }
942
+
943
+ export type AssistantStatus = 'loading' | 'ready' | 'error';
944
+
945
+ /** Everything the panel draws. Real data and the fixtures both produce it. */
946
+ export interface AssistantView {
947
+ status: AssistantStatus;
948
+ messages: ChatMessage[];
949
+ activity: ToolActivity[];
950
+ proposals: Proposal[];
951
+ tasks: AgentTask[];
952
+ error: string | null;
953
+ }
954
+
955
+ export interface AssistantController {
956
+ view: AssistantView;
957
+ draft: string;
958
+ limit: number;
959
+ /** True for fixture previews: every control is disabled and nothing is sent. */
960
+ readOnly: boolean;
961
+ setDraft(next: string): void;
962
+ canSend: boolean;
963
+ sending: boolean;
964
+ send(): Promise<void>;
965
+ /** The proposal whose decision is being saved, if one is. */
966
+ deciding: Proposal['id'] | null;
967
+ decide(id: Proposal['id'], decision: ProposalDecision): Promise<void>;
968
+ reload(): void;
969
+ }
970
+ `;
971
+ const ASSISTANT_SERVICE = `import type { AgentTask, ChatMessage, ChatReply, Proposal, ProposalDecision, ToolActivity } from '../../types/assistant';
972
+
973
+ // Calls to this app's own functions, api/chat.ts and api/proposals.ts. The
974
+ // session cookie rides along; the server decides whose rows these are.
975
+
976
+ export const MESSAGE_LIMIT = 2000;
977
+
978
+ export class AssistantRequestError extends Error {
979
+ constructor(
980
+ message: string,
981
+ readonly status: number,
982
+ /** Tool calls that already ran before the request failed (spend cap). */
983
+ readonly activity: ToolActivity[] = [],
984
+ ) {
985
+ super(message);
986
+ this.name = 'AssistantRequestError';
987
+ }
988
+ }
989
+
990
+ interface FailureBody {
991
+ message?: unknown;
992
+ activity?: unknown;
993
+ }
994
+
995
+ async function call<T>(path: string, init?: RequestInit): Promise<T> {
996
+ const response = await fetch(path, {
997
+ ...init,
998
+ credentials: 'include',
999
+ headers: { 'Content-Type': 'application/json' },
1000
+ });
1001
+ const body: unknown = await response.json().catch(() => null);
1002
+ if (!response.ok) {
1003
+ const failure: FailureBody = body && typeof body === 'object' ? body : {};
1004
+ throw new AssistantRequestError(
1005
+ typeof failure.message === 'string' ? failure.message : 'The request failed (' + response.status + ').',
1006
+ response.status,
1007
+ Array.isArray(failure.activity) ? (failure.activity as ToolActivity[]) : [],
1008
+ );
1009
+ }
1010
+ return body as T;
1011
+ }
1012
+
1013
+ export async function loadTranscript(): Promise<ChatMessage[]> {
1014
+ return (await call<{ messages: ChatMessage[] }>('/api/chat')).messages;
1015
+ }
1016
+
1017
+ export function loadLists(): Promise<{ proposals: Proposal[]; tasks: AgentTask[] }> {
1018
+ return call('/api/proposals');
1019
+ }
1020
+
1021
+ export function sendMessage(message: string): Promise<ChatReply> {
1022
+ return call('/api/chat', { method: 'POST', body: JSON.stringify({ message }) });
1023
+ }
1024
+
1025
+ export async function decideProposal(id: Proposal['id'], decision: ProposalDecision): Promise<void> {
1026
+ await call('/api/proposals', { method: 'POST', body: JSON.stringify({ id, decision }) });
1027
+ }
1028
+
1029
+ /** The reply as shown: a run that stopped early says why. */
1030
+ export function replyText(reply: ChatReply): string {
1031
+ if (reply.completion_reason === 'model_done') return reply.reply;
1032
+ return ((reply.reply ? reply.reply + ' ' : '') + '(stopped: ' + reply.completion_reason + ')');
1033
+ }
1034
+
1035
+ export function isSessionEnded(reason: unknown): boolean {
1036
+ return reason instanceof AssistantRequestError && reason.status === 401;
1037
+ }
1038
+
1039
+ export function assistantErrorMessage(reason: unknown): string {
1040
+ if (isSessionEnded(reason)) return 'Your session ended. Sign in again.';
1041
+ if (reason instanceof TypeError) return 'Could not reach the server. Check your connection and try again.';
1042
+ if (reason instanceof Error && reason.message) return reason.message;
1043
+ return 'Something went wrong. Try again.';
1044
+ }
1045
+ `;
1046
+ const USE_ASSISTANT = `import { useEffect, useRef, useState } from 'react';
1047
+ import { useAuth } from '@somewhere-tech/sdk/react';
1048
+ import type { AssistantController, AssistantView, Proposal, ProposalDecision } from '../../types/assistant';
1049
+ import {
1050
+ AssistantRequestError,
1051
+ assistantErrorMessage,
1052
+ decideProposal,
1053
+ isSessionEnded,
1054
+ loadLists,
1055
+ loadTranscript,
1056
+ MESSAGE_LIMIT,
1057
+ replyText,
1058
+ sendMessage,
1059
+ } from '../services/assistant';
1060
+
1061
+ const INITIAL: AssistantView = { status: 'loading', messages: [], activity: [], proposals: [], tasks: [], error: null };
1062
+
1063
+ // Mounted inside App's per-user boundary, so a new account starts fresh.
1064
+ // Results that arrive after this view unmounted are dropped.
1065
+ export function useAssistant(): AssistantController {
1066
+ const auth = useAuth();
1067
+ const mounted = useRef(true);
1068
+ const [view, setView] = useState<AssistantView>(INITIAL);
1069
+ const [draft, setDraft] = useState('');
1070
+ const [sending, setSending] = useState(false);
1071
+ const [deciding, setDeciding] = useState<Proposal['id'] | null>(null);
1072
+ const [reloadKey, setReloadKey] = useState(0);
1073
+
1074
+ useEffect(() => {
1075
+ mounted.current = true;
1076
+ return () => {
1077
+ mounted.current = false;
1078
+ };
1079
+ }, []);
1080
+
1081
+ useEffect(() => {
1082
+ let current = true;
1083
+ setView((previous) => ({ ...previous, status: 'loading', error: null }));
1084
+ Promise.all([loadTranscript(), loadLists()])
1085
+ .then(([messages, lists]) => {
1086
+ if (current) setView((previous) => ({ ...previous, status: 'ready', messages, ...lists }));
1087
+ })
1088
+ .catch((reason: unknown) => {
1089
+ if (!current) return;
1090
+ setView((previous) => ({ ...previous, status: 'error', error: assistantErrorMessage(reason) }));
1091
+ if (isSessionEnded(reason)) void auth.getUser();
1092
+ });
1093
+ return () => {
1094
+ current = false;
1095
+ };
1096
+ }, [reloadKey, auth]);
1097
+
1098
+ async function refreshLists() {
1099
+ const lists = await loadLists();
1100
+ if (mounted.current) setView((previous) => ({ ...previous, ...lists }));
1101
+ }
1102
+
1103
+ function fail(reason: unknown) {
1104
+ const ran = reason instanceof AssistantRequestError ? reason.activity : [];
1105
+ setView((previous) => ({ ...previous, error: assistantErrorMessage(reason), activity: ran.length ? ran : previous.activity }));
1106
+ if (isSessionEnded(reason)) void auth.getUser();
1107
+ }
1108
+
1109
+ const message = draft.trim();
1110
+ const canSend = view.status === 'ready' && !sending && message.length > 0 && message.length <= MESSAGE_LIMIT;
1111
+
1112
+ async function send() {
1113
+ if (!canSend) return;
1114
+ setSending(true);
1115
+ setDraft('');
1116
+ setView((previous) => ({ ...previous, error: null, activity: [], messages: [...previous.messages, { role: 'user', text: message }] }));
1117
+ try {
1118
+ const reply = await sendMessage(message);
1119
+ if (!mounted.current) return;
1120
+ setView((previous) => ({
1121
+ ...previous,
1122
+ activity: reply.activity,
1123
+ messages: [...previous.messages, { role: 'assistant', text: replyText(reply) }],
1124
+ }));
1125
+ await refreshLists();
1126
+ } catch (reason: unknown) {
1127
+ if (mounted.current) fail(reason);
1128
+ } finally {
1129
+ if (mounted.current) setSending(false);
1130
+ }
1131
+ }
1132
+
1133
+ async function decide(id: Proposal['id'], decision: ProposalDecision) {
1134
+ if (deciding !== null) return;
1135
+ setDeciding(id);
1136
+ setView((previous) => ({ ...previous, error: null }));
1137
+ try {
1138
+ await decideProposal(id, decision);
1139
+ await refreshLists();
1140
+ } catch (reason: unknown) {
1141
+ if (!mounted.current) return;
1142
+ fail(reason);
1143
+ // A 409 means it was already decided elsewhere; show the current list.
1144
+ await refreshLists().catch(() => undefined);
1145
+ } finally {
1146
+ if (mounted.current) setDeciding(null);
1147
+ }
1148
+ }
1149
+
1150
+ return {
1151
+ view,
1152
+ draft,
1153
+ limit: MESSAGE_LIMIT,
1154
+ readOnly: false,
1155
+ setDraft,
1156
+ canSend,
1157
+ sending,
1158
+ send,
1159
+ deciding,
1160
+ decide,
1161
+ reload: () => setReloadKey((key) => key + 1),
1162
+ };
1163
+ }
1164
+ `;
1165
+ const ASSISTANT_FIXTURES = `import type { AssistantController, AssistantView, ChatMessage } from '../../types/assistant';
1166
+ import { MESSAGE_LIMIT } from '../services/assistant';
1167
+
1168
+ // Declared preview states for the assistant panel. /fixtures?state=<name>
1169
+ // renders one from this static data: no sign-in check, no API call, nothing
1170
+ // read or written. flows/assistant-fixtures.json screenshots each of them.
1171
+ // Add a state here and a goto/expect/screenshot triple to that flow.
1172
+
1173
+ export const FIXTURES_PATH = '/fixtures';
1174
+
1175
+ const longWord = 'Supercalifragilisticexpialidocious'.repeat(4);
1176
+
1177
+ export const ASSISTANT_FIXTURES = {
1178
+ loading: { status: 'loading', messages: [], activity: [], proposals: [], tasks: [], error: null },
1179
+ empty: { status: 'ready', messages: [], activity: [], proposals: [], tasks: [], error: null },
1180
+ error: {
1181
+ status: 'ready',
1182
+ messages: [{ role: 'user', text: 'Plan my week and add everything.' }],
1183
+ activity: [{ tool: 'list_tasks', tool_call_id: 'toolu_fixture_1', ok: true, detail: '2 task(s)' }],
1184
+ proposals: [],
1185
+ tasks: [{ id: 1, title: 'Renew passport' }, { id: 2, title: 'Book dentist' }],
1186
+ error: 'This reply hit its spending limit and stopped. Anything listed under activity already happened.',
1187
+ },
1188
+ populated: {
1189
+ status: 'ready',
1190
+ messages: [
1191
+ { role: 'user', text: 'What is on my list, and should I add something for the trip?' },
1192
+ { role: 'assistant', text: 'You have 2 tasks. I proposed “Pack chargers”; it is waiting for your approval.' },
1193
+ ],
1194
+ activity: [
1195
+ { tool: 'list_tasks', tool_call_id: 'toolu_fixture_1', ok: true, detail: '2 task(s)' },
1196
+ { tool: 'propose_task', tool_call_id: 'toolu_fixture_2', ok: true, detail: 'Pack chargers' },
1197
+ ],
1198
+ proposals: [{ id: 7, title: 'Pack chargers' }],
1199
+ tasks: [{ id: 1, title: 'Renew passport' }, { id: 2, title: 'Book dentist' }],
1200
+ error: null,
1201
+ },
1202
+ long: {
1203
+ status: 'ready',
1204
+ messages: Array.from({ length: 12 }, (_, i): ChatMessage => ({
1205
+ role: i % 2 ? 'assistant' : 'user',
1206
+ text: i === 5
1207
+ ? 'An unbroken word: ' + longWord
1208
+ : 'Turn ' + (i + 1) + '. ' + 'A longer message that wraps across several lines on a phone. '.repeat(3),
1209
+ })),
1210
+ activity: Array.from({ length: 4 }, (_, i) => ({
1211
+ tool: 'propose_task',
1212
+ tool_call_id: 'toolu_fixture_long_' + i,
1213
+ ok: i !== 3,
1214
+ detail: i === 3 ? 'missing title' : 'Step ' + (i + 1),
1215
+ })),
1216
+ proposals: Array.from({ length: 5 }, (_, i) => ({ id: 20 + i, title: i === 0 ? longWord : 'Proposed task number ' + (i + 1) + ' with a fairly long title' })),
1217
+ tasks: Array.from({ length: 15 }, (_, i) => ({ id: 100 + i, title: 'Existing task ' + (i + 1) })),
1218
+ error: null,
1219
+ },
1220
+ } satisfies Record<string, AssistantView>;
1221
+
1222
+ export type AssistantFixtureName = keyof typeof ASSISTANT_FIXTURES;
1223
+
1224
+ export function assistantFixture(name: string): AssistantView | null {
1225
+ return Object.hasOwn(ASSISTANT_FIXTURES, name) ? ASSISTANT_FIXTURES[name as AssistantFixtureName] : null;
1226
+ }
1227
+
1228
+ /** A controller that renders the view and does nothing: every control is disabled. */
1229
+ export function fixtureController(view: AssistantView): AssistantController {
1230
+ return {
1231
+ view,
1232
+ draft: '',
1233
+ limit: MESSAGE_LIMIT,
1234
+ readOnly: true,
1235
+ setDraft: () => undefined,
1236
+ canSend: false,
1237
+ sending: false,
1238
+ send: async () => undefined,
1239
+ deciding: null,
1240
+ decide: async () => undefined,
1241
+ reload: () => undefined,
1242
+ };
1243
+ }
1244
+ `;
1245
+ const ASSISTANT_FIXTURES_PAGE = `import { ASSISTANT_FIXTURES, assistantFixture, fixtureController } from '../fixtures/assistant';
1246
+ import { AssistantPanel } from '../ui/AssistantPanel';
1247
+ import { EmptyState } from '../ui/feedback';
1248
+
1249
+ // /fixtures?state=<name>: the real panel drawn from static data. main.tsx
1250
+ // mounts this page outside the sign-in provider, so it sends no request.
1251
+ export function AssistantFixturesPage() {
1252
+ const name = new URLSearchParams(window.location.search).get('state') ?? '';
1253
+ const view = assistantFixture(name);
1254
+ return (
1255
+ <div className="content" data-fixture={view ? name : 'unknown'}>
1256
+ <p className="hint" role="status">
1257
+ {view ? 'Fixture: ' + name + '. Static preview data; nothing is sent.' : 'Unknown fixture.'}
1258
+ </p>
1259
+ {view ? (
1260
+ <AssistantPanel assistant={fixtureController(view)} />
1261
+ ) : (
1262
+ <EmptyState title="Pick a declared state.">{Object.keys(ASSISTANT_FIXTURES).map((n) => '?state=' + n).join(', ')}</EmptyState>
1263
+ )}
1264
+ </div>
1265
+ );
1266
+ }
1267
+ `;
1268
+ const ASSISTANT_FIXTURES_FLOW = `{
1269
+ "actions": [
1270
+ { "goto": "/fixtures?state=loading" },
1271
+ { "expect": { "selector": "[data-fixture=\\"loading\\"] [data-status=\\"loading\\"]", "visible": true } },
1272
+ { "screenshot": "fixture-loading" },
1273
+ { "goto": "/fixtures?state=empty" },
1274
+ { "expect": { "selector": "[data-fixture=\\"empty\\"] [data-status=\\"ready\\"]", "visible": true } },
1275
+ { "screenshot": "fixture-empty" },
1276
+ { "goto": "/fixtures?state=error" },
1277
+ { "expect": { "selector": "[data-fixture=\\"error\\"] [role=\\"alert\\"]", "text": "spending limit" } },
1278
+ { "screenshot": "fixture-error" },
1279
+ { "goto": "/fixtures?state=populated" },
1280
+ { "expect": { "selector": "[data-fixture=\\"populated\\"] [aria-label=\\"Waiting for your approval\\"]", "text": "Pack chargers" } },
1281
+ { "screenshot": "fixture-populated" },
1282
+ { "goto": "/fixtures?state=long" },
1283
+ { "expect": { "selector": "[data-fixture=\\"long\\"] [data-role=\\"message\\"]", "count": 12 } },
1284
+ { "screenshot": "fixture-long" }
1285
+ ],
1286
+ "viewports": ["desktop", "mobile"]
1287
+ }
1288
+ `;
1289
+ const STYLED_ASSISTANT_PANEL = `import type { FormEvent } from 'react';
1290
+ import type { AssistantController } from '../../types/assistant';
1291
+
1292
+ export function AssistantPanel({ assistant }: { assistant: AssistantController }) {
1293
+ const { view } = assistant;
1294
+ const loading = view.status === 'loading';
1295
+
1296
+ function onSubmit(event: FormEvent<HTMLFormElement>) {
1297
+ event.preventDefault();
1298
+ void assistant.send();
1299
+ }
1300
+
1301
+ return (
1302
+ <div className="assistant" data-status={view.status}>
1303
+ <section className="panel assistant__chat" aria-label="Conversation">
1304
+ <p className="panel__title">Assistant</p>
1305
+ <p className="hint">It reads your tasks and drafts new ones. Nothing is added until you approve it.</p>
1306
+ {loading ? <p className="muted" role="status">Loading your conversation…</p> : null}
1307
+ {view.status === 'ready' && view.messages.length === 0 ? (
1308
+ <p className="muted">No messages yet. Ask about your tasks, or ask for a plan.</p>
1309
+ ) : null}
1310
+ <ol className="transcript">
1311
+ {view.messages.map((message, index) => (
1312
+ <li key={index} data-role="message" className={'message message--' + message.role}>{message.text}</li>
1313
+ ))}
1314
+ </ol>
1315
+ {view.error ? (
1316
+ <div className="alert" role="alert">
1317
+ <p>{view.error}</p>
1318
+ {view.status === 'error' ? <button type="button" className="button button--quiet" onClick={assistant.reload}>Try again</button> : null}
1319
+ </div>
1320
+ ) : null}
1321
+ <form className="composer" onSubmit={onSubmit} aria-label="Send a message">
1322
+ <div className="field">
1323
+ <label htmlFor="assistant-message">Message</label>
1324
+ <textarea id="assistant-message" rows={2} maxLength={assistant.limit} disabled={loading || assistant.readOnly}
1325
+ placeholder="What should I do this week?" value={assistant.draft}
1326
+ onChange={(event) => assistant.setDraft(event.target.value)} />
1327
+ </div>
1328
+ <button type="submit" className="button" disabled={!assistant.canSend} aria-busy={assistant.sending}>
1329
+ {assistant.sending ? 'Thinking…' : 'Send'}
1330
+ </button>
1331
+ </form>
1332
+ {view.activity.length ? (
1333
+ <details className="activity" open>
1334
+ <summary>Tool activity for the last reply</summary>
1335
+ <ol>
1336
+ {view.activity.map((item, index) => (
1337
+ <li key={item.tool_call_id + index} className={item.ok ? 'activity__item' : 'activity__item activity__item--failed'}>
1338
+ <strong>{item.tool}</strong> <span>{item.detail}</span> <code>{item.tool_call_id}</code>
1339
+ </li>
1340
+ ))}
1341
+ </ol>
1342
+ </details>
1343
+ ) : null}
1344
+ </section>
1345
+
1346
+ <aside className="assistant__side">
1347
+ {view.proposals.length ? (
1348
+ <section className="panel" aria-label="Waiting for your approval">
1349
+ <p className="section-title">Waiting for your approval</p>
1350
+ <ul className="proposals">
1351
+ {view.proposals.map((proposal) => (
1352
+ <li key={proposal.id} className="proposal">
1353
+ <span className="proposal__title">{proposal.title}</span>
1354
+ <span className="actions">
1355
+ <button type="button" className="button" disabled={assistant.deciding !== null || assistant.readOnly}
1356
+ aria-busy={assistant.deciding === proposal.id} onClick={() => void assistant.decide(proposal.id, 'approve')}>Approve</button>
1357
+ <button type="button" className="button button--quiet" disabled={assistant.deciding !== null || assistant.readOnly}
1358
+ onClick={() => void assistant.decide(proposal.id, 'reject')}>Reject</button>
1359
+ </span>
1360
+ </li>
1361
+ ))}
1362
+ </ul>
1363
+ </section>
1364
+ ) : null}
1365
+ <section className="panel" aria-label="Your tasks">
1366
+ <p className="section-title">Your tasks</p>
1367
+ {view.status === 'ready' && view.tasks.length === 0 ? <p className="muted">No tasks yet.</p> : null}
1368
+ <ul className="agent-tasks">
1369
+ {view.tasks.map((task) => <li key={task.id}>{task.title}</li>)}
1370
+ </ul>
1371
+ </section>
1372
+ </aside>
1373
+ </div>
1374
+ );
1375
+ }
1376
+ `;
1377
+ const PLAIN_ASSISTANT_PANEL = `import type { FormEvent } from 'react';
1378
+ import type { AssistantController } from '../../types/assistant';
1379
+
1380
+ export function AssistantPanel({ assistant }: { assistant: AssistantController }) {
1381
+ const { view } = assistant;
1382
+ const loading = view.status === 'loading';
1383
+ const locked = assistant.deciding !== null || assistant.readOnly;
1384
+
1385
+ function onSubmit(event: FormEvent<HTMLFormElement>) {
1386
+ event.preventDefault();
1387
+ void assistant.send();
1388
+ }
1389
+
1390
+ return (
1391
+ <div data-status={view.status}>
1392
+ <section aria-label="Conversation">
1393
+ <h2>Assistant</h2>
1394
+ <p>It reads your tasks and drafts new ones. Nothing is added until you approve it.</p>
1395
+ {loading ? <p role="status">Loading your conversation…</p> : null}
1396
+ {view.status === 'ready' && view.messages.length === 0 ? <p>No messages yet.</p> : null}
1397
+ <ol>
1398
+ {view.messages.map((message, index) => (
1399
+ <li key={index} data-role="message"><strong>{message.role === 'user' ? 'You' : 'Assistant'}:</strong> {message.text}</li>
1400
+ ))}
1401
+ </ol>
1402
+ {view.error ? (
1403
+ <div role="alert">
1404
+ <p>{view.error}</p>
1405
+ {view.status === 'error' ? <button type="button" onClick={assistant.reload}>Try again</button> : null}
1406
+ </div>
1407
+ ) : null}
1408
+ <form onSubmit={onSubmit} aria-label="Send a message">
1409
+ <label htmlFor="assistant-message">Message</label>
1410
+ <textarea id="assistant-message" rows={2} maxLength={assistant.limit} disabled={loading || assistant.readOnly}
1411
+ value={assistant.draft} onChange={(event) => assistant.setDraft(event.target.value)} />
1412
+ <button type="submit" disabled={!assistant.canSend} aria-busy={assistant.sending}>{assistant.sending ? 'Thinking…' : 'Send'}</button>
1413
+ </form>
1414
+ {view.activity.length ? (
1415
+ <details open>
1416
+ <summary>Tool activity for the last reply</summary>
1417
+ <ol>
1418
+ {view.activity.map((item, index) => (
1419
+ <li key={item.tool_call_id + index}>{item.tool} {item.ok ? 'ok' : 'failed'}: {item.detail} ({item.tool_call_id})</li>
1420
+ ))}
1421
+ </ol>
1422
+ </details>
1423
+ ) : null}
1424
+ </section>
1425
+ {view.proposals.length ? (
1426
+ <section aria-label="Waiting for your approval">
1427
+ <h2>Waiting for your approval</h2>
1428
+ <ul>
1429
+ {view.proposals.map((proposal) => (
1430
+ <li key={proposal.id}>
1431
+ {proposal.title}{' '}
1432
+ <button type="button" disabled={locked} onClick={() => void assistant.decide(proposal.id, 'approve')}>Approve</button>{' '}
1433
+ <button type="button" disabled={locked} onClick={() => void assistant.decide(proposal.id, 'reject')}>Reject</button>
1434
+ </li>
1435
+ ))}
1436
+ </ul>
1437
+ </section>
1438
+ ) : null}
1439
+ <section aria-label="Your tasks">
1440
+ <h2>Your tasks</h2>
1441
+ {view.status === 'ready' && view.tasks.length === 0 ? <p>No tasks yet.</p> : null}
1442
+ <ul>{view.tasks.map((task) => <li key={task.id}>{task.title}</li>)}</ul>
1443
+ </section>
1444
+ </div>
1445
+ );
1446
+ }
1447
+ `;
657
1448
  // ---------------------------------------------------------------------- pages
658
1449
  // One set of pages for both UI modes: hooks in, typed values and callbacks out.
659
1450
  const SIGN_IN_PAGE = `import { useCredentialsForm, useUnconfirmedSignOut } from '../auth/hooks';
@@ -698,7 +1489,28 @@ export function SignedInLayout({ user, children }: { user: User; children: React
698
1489
  );
699
1490
  }
700
1491
  `;
701
- function homePage(privateData) {
1492
+ function homePage(privateData, agent) {
1493
+ if (agent) {
1494
+ const notes = privateData;
1495
+ return `import type { User } from '../../types/auth';
1496
+ import { useAssistant } from '../data/useAssistant';
1497
+ ${notes ? "import { useNotes } from '../data/useNotes';\n" : ''}import { AssistantPanel } from '../ui/AssistantPanel';
1498
+ ${notes ? "import { NotesBoard } from '../ui/NotesBoard';\n" : ''}import { SignedInLayout } from './SignedInLayout';
1499
+
1500
+ // The assistant example is removable: delete it here, AssistantPanel,
1501
+ // useAssistant, services/assistant.ts, types/assistant.ts, src/fixtures/,
1502
+ // AssistantFixturesPage, the /fixtures branch in main.tsx, api/chat.ts,
1503
+ // api/proposals.ts and the tasks/proposals tables in db/schema.ts.
1504
+ export function HomePage({ user }: { user: User }) {
1505
+ const assistant = useAssistant();
1506
+ ${notes ? ' const notes = useNotes();\n' : ''} return (
1507
+ <SignedInLayout user={user}>
1508
+ ${notes ? ' <NotesBoard notes={notes} />\n' : ''} <AssistantPanel assistant={assistant} />
1509
+ </SignedInLayout>
1510
+ );
1511
+ }
1512
+ `;
1513
+ }
702
1514
  if (privateData) {
703
1515
  return `import type { User } from '../../types/auth';
704
1516
  import { useNotes } from '../data/useNotes';
@@ -1326,10 +2138,38 @@ const NOTES_CSS = `/* Notes example: delete with src/ui/NotesBoard.tsx. */
1326
2138
  .note__actions { margin-left: calc(-1 * var(--space-2)); }
1327
2139
  }
1328
2140
  `;
2141
+ // The notes CSS already defines these; the assistant adds them when notes is absent.
2142
+ const ASSISTANT_SHARED_CSS = `.alert { display: flex; flex-wrap: wrap; gap: var(--space-3); align-items: center; justify-content: space-between; padding: var(--space-3) var(--space-4); border: 1px solid var(--color-danger); border-radius: var(--radius-control); color: var(--color-danger); background: var(--color-surface); }
2143
+ .alert p { margin: 0; }
2144
+ .section-title { margin: 0 0 var(--space-3); font-size: var(--text-sm); font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--color-muted); }
2145
+ `;
2146
+ const ASSISTANT_CSS = `/* Assistant example: delete with src/ui/AssistantPanel.tsx. */
2147
+ .assistant { display: grid; grid-template-columns: minmax(0, 2fr) minmax(260px, 1fr); gap: var(--space-6); align-items: start; margin-top: var(--space-8); }
2148
+ .assistant__side { display: grid; gap: var(--space-6); }
2149
+ .transcript { display: grid; gap: var(--space-2); margin: 0; padding: 0; list-style: none; }
2150
+ .message { max-width: 85%; padding: var(--space-2) var(--space-3); border-radius: var(--radius-control); white-space: pre-wrap; overflow-wrap: anywhere; }
2151
+ .message--user { justify-self: end; background: var(--color-bg); }
2152
+ .message--assistant { justify-self: start; border: 1px solid var(--color-border); }
2153
+ .composer { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--space-2); align-items: end; }
2154
+ .activity { color: var(--color-muted); font-size: var(--text-sm); }
2155
+ .activity ol { margin: var(--space-2) 0 0; padding-left: var(--space-6); }
2156
+ .activity code { overflow-wrap: anywhere; }
2157
+ .activity__item--failed strong { color: var(--color-danger); }
2158
+ .proposals, .agent-tasks { display: grid; gap: var(--space-3); margin: 0; padding: 0; list-style: none; }
2159
+ .proposal { display: grid; gap: var(--space-2); }
2160
+ .proposal__title, .agent-tasks li { overflow-wrap: anywhere; }
2161
+ .agent-tasks li { padding-bottom: var(--space-2); border-bottom: 1px solid var(--color-border); }
2162
+
2163
+ @media (max-width: 760px) {
2164
+ .assistant { grid-template-columns: 1fr; }
2165
+ .composer { grid-template-columns: 1fr; }
2166
+ }
2167
+ `;
1329
2168
  // --------------------------------------------------------------------- readme
1330
2169
  function readme(selection) {
1331
2170
  const styled = selection.ui === 'styled';
1332
2171
  const privateData = selection.modules.includes('private-data');
2172
+ const agent = selection.modules.includes('agent');
1333
2173
  const lines = [
1334
2174
  '# somewhere.tech app',
1335
2175
  '',
@@ -1344,10 +2184,16 @@ function readme(selection) {
1344
2184
  if (privateData) {
1345
2185
  lines.push('- Data: `db/schema.ts` (tables and browser permissions), `src/services/notes.ts` (calls), `src/data/useNotes.ts` (state). The notes example is removable.');
1346
2186
  }
2187
+ if (agent) {
2188
+ lines.push('- Assistant: `api/chat.ts` (the agent run and its tools), `api/proposals.ts` (approve/reject), `src/services/assistant.ts`, `src/data/useAssistant.ts`, `src/ui/AssistantPanel.tsx`. Preview states: `src/fixtures/assistant.ts`.');
2189
+ }
1347
2190
  lines.push('', '## Auth', '', 'Auth is handled by `@somewhere-tech/sdk`. The session is an httpOnly cookie;', 'app code does not store or send a token. `src/App.tsx` shows private pages only', 'for an account the server confirmed: a loading screen until the first check', 'answers, and a "try again" screen when the server cannot be reached (pages', 'already open stay mounted but hidden, so unsaved input survives). Signing out', 'clears private pages at once and shows "Signing out…" until the server answers;', 'if it cannot confirm, the sign-in page says so and offers "Sign out again". The gate is', 'only UX: functions and `db/schema.ts` decide what a request may read or write.', 'Password reset, OAuth and MFA are not generated.');
1348
2191
  if (privateData) {
1349
2192
  lines.push('', '## Private data', '', '`db/schema.ts` declares `notes` with `owner()`, so the generated `somewhere:data`', 'client returns and changes only the signed-in user\'s rows; the browser code', 'sends no user filter. Functions you add can bypass this with explicit', 'server-authority calls and must check the caller themselves. The title/body', 'length limits are form checks only. Contract: `somewhere docs declared-data`.');
1350
2193
  }
2194
+ if (agent) {
2195
+ lines.push('', '## Assistant', '', '`api/chat.ts` runs `sw.agent.run` inline inside the request: no agent id, nothing', 'to cancel, no streaming. The reply and its tool activity arrive together.', '', '- Reads: `list_tasks` uses `sw.db.from`. `tasks` and `proposals` are `owner()`,', ' so every structured call is scoped to the person who sent the message. Keep', ' tools on these calls; do not switch them to server-authority reads.', '- Effects need a person. `propose_task` only inserts a pending proposal.', ' `POST /api/proposals` writes the task after the owner clicks Approve; its', ' guarded update makes a double click, a second tab or another user\'s id a', ' 409 that writes nothing.', '- Approval and task creation are two writes, not one transaction. The approval', ' is claimed first and never reopened. If the task write fails or its outcome', ' is unknown, the answer is 500 `TASK_CREATION_UNCONFIRMED`: refresh the task', ' list, and if the task is missing ask the assistant to propose it again.', '- `toolCallId` is a dedupe key, not exactly-once. Proposals are unique on it,', ' so the same call id twice leaves one row. Inline it is the model\'s tool-use', ' id; durable runs use `agentId:turn:index`.', '- Spend is bounded, not priced in advance: `maxSteps: 4`, `maxSpendCents: 10`,', ' checked between billed calls, so one call can cross it. Then the turn answers', ' 402 `AI_SPEND_CAP_EXCEEDED` and lists the tools that already ran. A step whose', ' cost is unknown ends with `completion_reason: \'cost_pending\'`; the page shows', ' every reason other than `model_done`.', '- History is saved by the platform under `conversation_id: \'assistant\'`, keyed', ' to the verified user. `GET /api/chat` reads it back.', '- No `model` is set, so the run uses the `sw.ai.chat` default; add `provider`', ' and `model` from `ai_catalog` to choose another.', '', 'Making it durable (`sw.agent.start`, `sw.agent.cancel`) is a separate design:', 'step callbacks run without the original request, so the owner-scoped tools', 'above would have no signed-in user. Cancel stops later steps; it does not undo', 'a tool that already ran. `somewhere docs sw.agent`', '', '### Preview states', '', '`/fixtures?state=loading|empty|error|populated|long` draws the real panel from', '`src/fixtures/assistant.ts`. `src/main.tsx` mounts it outside the sign-in', 'provider, so it sends no request and reads or writes nothing; controls are', 'disabled. `somewhere verify --url <app-url> --flow flows/assistant-fixtures.json`', 'screenshots each state on desktop and mobile. It reports page errors; it does', 'not map them to a line in `src/`. Fixtures render your own source; they are', 'not a sandbox for code you did not write.');
2196
+ }
1351
2197
  lines.push('', '## Run', '', '```sh', 'somewhere typecheck', 'somewhere deploy', 'somewhere verify', '```', '', 'Deploy the raw source; the platform compiles it.', '');
1352
2198
  return lines.join('\n');
1353
2199
  }
@@ -1361,12 +2207,15 @@ export function extensionPoints(selection) {
1361
2207
  };
1362
2208
  if (selection.modules.includes('private-data'))
1363
2209
  points.data = 'db/schema.ts, src/services/notes.ts, src/data/useNotes.ts';
2210
+ if (selection.modules.includes('agent'))
2211
+ points.assistant = 'api/chat.ts, api/proposals.ts, src/data/useAssistant.ts, src/fixtures/assistant.ts';
1364
2212
  return points;
1365
2213
  }
1366
2214
  // ---------------------------------------------------------------------- build
1367
2215
  export function createFeatureTemplate(selection, options) {
1368
2216
  const styled = selection.ui === 'styled';
1369
2217
  const privateData = selection.modules.includes('private-data');
2218
+ const agent = selection.modules.includes('agent');
1370
2219
  const files = [
1371
2220
  { path: '.gitignore', content: 'node_modules\ndist\nbuild\n.env\n' },
1372
2221
  { path: 'AGENTS.md', content: INIT_AGENTS_MD },
@@ -1377,7 +2226,7 @@ export function createFeatureTemplate(selection, options) {
1377
2226
  { path: 'index.html', content: indexHtml(options.appName) },
1378
2227
  { path: 'api/auth/[...path].ts', content: AUTH_API },
1379
2228
  { path: 'types/auth.ts', content: AUTH_TYPES },
1380
- { path: 'src/main.tsx', content: mainTsx(styled) },
2229
+ { path: 'src/main.tsx', content: mainTsx(styled, agent) },
1381
2230
  { path: 'src/App.tsx', content: APP },
1382
2231
  { path: 'src/config.ts', content: configTs(options.appName) },
1383
2232
  { path: 'src/routes.ts', content: ROUTES },
@@ -1385,17 +2234,22 @@ export function createFeatureTemplate(selection, options) {
1385
2234
  { path: 'src/auth/hooks.ts', content: AUTH_HOOKS },
1386
2235
  { path: 'src/pages/SignInPage.tsx', content: SIGN_IN_PAGE },
1387
2236
  { path: 'src/pages/SignedInLayout.tsx', content: SIGNED_IN_LAYOUT },
1388
- { path: 'src/pages/HomePage.tsx', content: homePage(privateData) },
2237
+ { path: 'src/pages/HomePage.tsx', content: homePage(privateData, agent) },
1389
2238
  { path: 'src/pages/NotFoundPage.tsx', content: NOT_FOUND_PAGE },
1390
2239
  { path: 'src/ui/feedback.tsx', content: styled ? STYLED_FEEDBACK : PLAIN_FEEDBACK },
1391
2240
  { path: 'src/ui/AuthCard.tsx', content: styled ? STYLED_AUTH_CARD : PLAIN_AUTH_CARD },
1392
2241
  { path: 'src/ui/AppShell.tsx', content: styled ? STYLED_APP_SHELL : PLAIN_APP_SHELL },
1393
2242
  ];
1394
2243
  if (styled) {
1395
- files.push({ path: 'src/styles/tokens.css', content: TOKENS_CSS }, { path: 'src/styles/app.css', content: privateData ? APP_CSS + '\n' + NOTES_CSS : APP_CSS });
2244
+ files.push({ path: 'src/styles/tokens.css', content: TOKENS_CSS }, { path: 'src/styles/app.css', content: [APP_CSS, ...(privateData ? [NOTES_CSS] : []), ...(agent ? [privateData ? ASSISTANT_CSS : ASSISTANT_SHARED_CSS + ASSISTANT_CSS] : [])].join('\n') });
1396
2245
  }
2246
+ if (privateData || agent)
2247
+ files.push({ path: 'db/schema.ts', content: schemaTs(privateData, agent) });
1397
2248
  if (privateData) {
1398
- files.push({ path: 'db/schema.ts', content: SCHEMA }, { path: 'types/notes.ts', content: NOTES_TYPES }, { path: 'src/services/notes.ts', content: NOTES_SERVICE }, { path: 'src/data/useNotes.ts', content: USE_NOTES }, { path: 'src/ui/NotesBoard.tsx', content: styled ? STYLED_NOTES_BOARD : PLAIN_NOTES_BOARD });
2249
+ files.push({ path: 'types/notes.ts', content: NOTES_TYPES }, { path: 'src/services/notes.ts', content: NOTES_SERVICE }, { path: 'src/data/useNotes.ts', content: USE_NOTES }, { path: 'src/ui/NotesBoard.tsx', content: styled ? STYLED_NOTES_BOARD : PLAIN_NOTES_BOARD });
2250
+ }
2251
+ if (agent) {
2252
+ files.push({ path: 'api/chat.ts', content: CHAT_API }, { path: 'api/proposals.ts', content: PROPOSALS_API }, { path: 'types/assistant.ts', content: ASSISTANT_TYPES }, { path: 'src/services/assistant.ts', content: ASSISTANT_SERVICE }, { path: 'src/data/useAssistant.ts', content: USE_ASSISTANT }, { path: 'src/fixtures/assistant.ts', content: ASSISTANT_FIXTURES }, { path: 'src/pages/AssistantFixturesPage.tsx', content: ASSISTANT_FIXTURES_PAGE }, { path: 'src/ui/AssistantPanel.tsx', content: styled ? STYLED_ASSISTANT_PANEL : PLAIN_ASSISTANT_PANEL }, { path: 'flows/assistant-fixtures.json', content: ASSISTANT_FIXTURES_FLOW });
1399
2253
  }
1400
2254
  return files;
1401
2255
  }
@@ -1 +1 @@
1
- {"version":3,"file":"init-feature-template.js","sourceRoot":"","sources":["../../src/lib/init-feature-template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-feature-template.js","sourceRoot":"","sources":["../../src/lib/init-feature-template.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  // The module menu for `somewhere init --features`. A const table, not a
2
2
  // plugin system: each module names what it requires, and the resolver adds
3
3
  // those requirements and reports them. Files come from init-feature-template.ts.
4
- export const INIT_MODULE_IDS = ['auth', 'private-data'];
4
+ export const INIT_MODULE_IDS = ['auth', 'private-data', 'agent'];
5
5
  export const INIT_UI_MODES = ['styled', 'headless'];
6
6
  const MODULES = [
7
7
  {
@@ -14,6 +14,11 @@ const MODULES = [
14
14
  summary: 'A notes table each signed-in user owns (db/schema.ts owner()), read and written from the browser through the generated somewhere:data client, with form validation, error mapping, no-change results, and a per-user reset on sign-out or account switch.',
15
15
  requires: ['auth'],
16
16
  },
17
+ {
18
+ id: 'agent',
19
+ summary: 'A signed-in assistant on sw.agent.run (inline, at most 4 steps and 10 cents per reply): server-saved conversation, tool activity, and task proposals the user approves or rejects before anything is written. Owner-scoped tasks/proposals tables in db/schema.ts, reached only through api/chat.ts and api/proposals.ts. Static preview states at /fixtures?state=loading|empty|error|populated|long send no requests; flows/assistant-fixtures.json screenshots them with somewhere verify.',
20
+ requires: ['auth'],
21
+ },
17
22
  ];
18
23
  const UI_MODES = [
19
24
  { id: 'styled', summary: 'Styled views in src/ui plus src/styles/tokens.css and app.css. Replace them without touching auth or data behaviour.' },
@@ -28,6 +33,7 @@ const NOT_OFFERED = [
28
33
  { id: 'payments', reason: 'Not generated. See `somewhere docs payments`.' },
29
34
  { id: 'teams', reason: 'Not generated. See member() scopes in `somewhere docs declared-data`.' },
30
35
  { id: 'public-sharing', reason: 'Not generated. See publicRead in `somewhere docs declared-data`.' },
36
+ { id: 'agent-durable', reason: 'Not generated. The agent module runs inline; durable runs, cancel, streaming, memory and external tools need their own design. See `somewhere docs sw.agent`.' },
31
37
  ];
32
38
  /** A usage error: the command exits 2 before any login, request or write. */
33
39
  export class InitSelectionError extends Error {
@@ -1 +1 @@
1
- {"version":3,"file":"init-features.js","sourceRoot":"","sources":["../../src/lib/init-features.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-features.js","sourceRoot":"","sources":["../../src/lib/init-features.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,iFAAiF;AAEjF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAU,CAAC;AAG1E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAU,CAAC;AAS7D,MAAM,OAAO,GAAoC;IAC/C;QACE,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,kQAAkQ;QAC3Q,QAAQ,EAAE,EAAE;KACb;IACD;QACE,EAAE,EAAE,cAAc;QAClB,OAAO,EAAE,2PAA2P;QACpQ,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD;QACE,EAAE,EAAE,OAAO;QACX,OAAO,EAAE,+dAA+d;QACxe,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,QAAQ,GAAmD;IAC/D,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,sHAAsH,EAAE;IACjJ,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,iIAAiI,EAAE;CAC/J,CAAC;AAEF,4EAA4E;AAC5E,MAAM,WAAW,GAA8C;IAC7D,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,+DAA+D,EAAE;IAChG,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,qFAAqF,EAAE;IACvH,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,kDAAkD,EAAE;IAC3E,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE;IACvC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,+CAA+C,EAAE;IAC3E,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,uEAAuE,EAAE;IAChG,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,kEAAkE,EAAE;IACpG,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,+JAA+J,EAAE;CACjM,CAAC;AAYF,6EAA6E;AAC7E,MAAM,OAAO,kBAAmB,SAAQ,KAAK;CAAG;AAEhD,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAQ,eAAqC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAQ,aAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,EAAE,GAAG,QAAQ;IAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7E,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,kBAAkB,CAAC,yCAAyC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvG,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,kBAAkB,CAC1B,sBAAsB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAC/F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,kBAAkB,CAAC,gBAAgB,EAAE,iBAAiB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAqB,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgB,CAAC;IACzC,MAAM,KAAK,GAAG,CAAC,EAAgB,EAAE,EAAE;QACjC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,KAAK,MAAM,UAAU,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC,QAAQ;YAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5E,CAAC,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,MAAM;QAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,CAAC,GAAsB,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;QAC1B,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;QAC1B,EAAE;KACH,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAgB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC;AACnD,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,QAA2E;IACrG,MAAM,QAAQ,GAAG,CAAC,SAAwB,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5F,MAAM,SAAS,GAAG,CAAC,OAAuB,EAAE,KAAiB,QAAQ,EAAiB,EAAE,CACtF,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,CAAC,GAAa,EAAE,IAAc,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxG,MAAM,UAAU,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;IACxC,OAAO;QACL,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,2FAA2F;QACpG,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/B,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC7B,KAAK,EAAE,UAAU,CACf,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAClD,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CACtE;SACF,CAAC,CAAC;QACH,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;iBAChG,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;qBAC5C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;qBACrH,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;qBACxB,IAAI,EAAE;aACV,CAAC;QACJ,CAAC,CAAC;QACF,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;QAC1B,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,iBAAiB,CAAC,SAAwB;IACxD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QACxG,OAAO,GAAG,EAAE,uBAAuB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,SAAS,CAAC,EAAE,EAAE,CAAC;AAC/G,CAAC"}
@@ -9,7 +9,7 @@ const PACKAGE_JSON = `{
9
9
  "typecheck": "tsc --noEmit"
10
10
  },
11
11
  "dependencies": {
12
- "@somewhere-tech/sdk": "^0.11.1",
12
+ "@somewhere-tech/sdk": "^0.11.3",
13
13
  "react": "^19.2.0",
14
14
  "react-dom": "^19.2.0",
15
15
  "react-router-dom": "^7.9.5"
@@ -1,8 +1,8 @@
1
1
  export const BUNDLED_SKILLS_PACK = {
2
2
  "schema": 1,
3
3
  "name": "somewhere-skills",
4
- "version": "1+efd062ab7fba",
5
- "sha256": "efd062ab7fba9b20d6229afba854ef03383a83a3b8c4206a1ab6bea3067f6898",
4
+ "version": "1+03fdf905f185",
5
+ "sha256": "03fdf905f185341821678fe566fd40bd2e08c6f188219ee8076fd5aba16454c4",
6
6
  "files": [
7
7
  {
8
8
  "path": "deploy-verify-loop/SKILL.md",
@@ -16,8 +16,8 @@ export const BUNDLED_SKILLS_PACK = {
16
16
  },
17
17
  {
18
18
  "path": "sign-in-setup/SKILL.md",
19
- "sha256": "57ff03a9d3064541ccb39f9b42a3e75a49f098748539e16722ed5daad26e8ce3",
20
- "content": "---\nname: sign-in-setup\ndescription: When the app needs users to sign up, sign in, or sign out.\n---\n\n# Set up sign-in\n\n## Server: one route file\n\n`login` / `signup` are developer-key-gated (the browser can't call them), so one server route mediates them and sets the session cookies.\n\n```ts\n// api/auth/[...path].ts\nexport { somewhereAuth as default } from '@somewhere-tech/sdk/server';\n```\n\nIt serves `POST /signup`, `/login`, `/logout`, `/magic-link`, `/magic-link/verify`, `GET /me`, and the Google/GitHub/Discord `GET /<provider>-url` + `POST /<provider>` code exchange.\n\n## Page: the SDK client\n\n```bash\nnpm i @somewhere-tech/sdk\n```\n\n```ts\nimport { createSomewhereAuth } from '@somewhere-tech/sdk/auth'; // 0.11.1+\nconst auth = createSomewhereAuth(); // talks to /api/auth, cookie mode\n\ntry {\n await auth.signUp({ email, password }); // or auth.signIn({ email, password })\n} catch (err) {\n showMessage((err as Error).message); // \"Wrong email or password.\"\n}\nconst user = await auth.getUser(); // probes /api/auth/me; null when signed out\nawait auth.signOut();\n```\n\nCalls to your own `api/*` functions just send `credentials: 'include'`.\n\n`sw.auth.fromRequest(req)` reads the cookie or Authorization header and returns the validated user — or null. **Never** parse cookies manually inside a function.\n\nsign up as `<name>@<subdomain>.test.somewhere.site`, then `somewhere email test-inbox <addr>` prints the message and its magic link.\n\n## Failure 1: sign-in errors\n\nexpected failures (wrong password, duplicate email, weak password) come back as structured 4xx with the real message, never an opaque 500.\n\n## Failure 2: AUTH_REQUIRED from an owner() table\n\nThe table is user-owned, so the platform scopes it to a principal, and this request had none: there is no signed-in user, and this table does not declare `owner({ visitors: true })`, which is the declaration that accepts a stable anonymous visitor identity.\n\nSources (`somewhere docs <topic>`): auth-client, getting-started, sdk, troubleshooting.\n"
19
+ "sha256": "68654c8381c2f7df7e13d2b8b9eff08af97f89d799bb937941825224fabb881b",
20
+ "content": "---\nname: sign-in-setup\ndescription: When the app needs users to sign up, sign in, or sign out.\n---\n\n# Set up sign-in\n\n## Server: one route file\n\n`login` / `signup` are developer-key-gated (the browser can't call them), so one server route mediates them and sets the session cookies.\n\n```ts\n// api/auth/[...path].ts\nexport { somewhereAuth as default } from '@somewhere-tech/sdk/server';\n```\n\nIt serves `POST /signup`, `/login`, `/logout`, `/magic-link`, `/magic-link/verify`, `GET /me`, and the Google/GitHub/Discord `GET /<provider>-url` + `POST /<provider>` code exchange.\n\n## Page: the SDK client\n\n```bash\nnpm i @somewhere-tech/sdk\n```\n\n```ts\nimport { createSomewhereAuth } from '@somewhere-tech/sdk/auth'; // 0.11.3+\nconst auth = createSomewhereAuth(); // talks to /api/auth, cookie mode\n\ntry {\n await auth.signUp({ email, password }); // or auth.signIn({ email, password })\n} catch (err) {\n showMessage((err as Error).message); // \"Wrong email or password.\"\n}\nconst user = await auth.getUser(); // probes /api/auth/me; null when signed out\nawait auth.signOut();\n```\n\nCalls to your own `api/*` functions just send `credentials: 'include'`.\n\n`sw.auth.fromRequest(req)` reads the cookie or Authorization header and returns the validated user — or null. **Never** parse cookies manually inside a function.\n\nsign up as `<name>@<subdomain>.test.somewhere.site`, then `somewhere email test-inbox <addr>` prints the message and its magic link.\n\n## Failure 1: sign-in errors\n\nexpected failures (wrong password, duplicate email, weak password) come back as structured 4xx with the real message, never an opaque 500.\n\n## Failure 2: AUTH_REQUIRED from an owner() table\n\nThe table is user-owned, so the platform scopes it to a principal, and this request had none: there is no signed-in user, and this table does not declare `owner({ visitors: true })`, which is the declaration that accepts a stable anonymous visitor identity.\n\nSources (`somewhere docs <topic>`): auth-client, getting-started, sdk, troubleshooting.\n"
21
21
  },
22
22
  {
23
23
  "path": "troubleshooting/SKILL.md",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@somewhere-tech/cli",
3
- "version": "0.37.4",
3
+ "version": "0.37.6",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@somewhere-tech/cli",
9
- "version": "0.37.4",
9
+ "version": "0.37.6",
10
10
  "bundleDependencies": [
11
11
  "@modelcontextprotocol/sdk",
12
12
  "chokidar",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@somewhere-tech/cli",
3
- "version": "0.37.4",
3
+ "version": "0.37.6",
4
4
  "description": "CLI for somewhere.tech — auth, projects, deploy, pull, promote, db, logs, env, MCP bridge.",
5
5
  "keywords": [
6
6
  "somewhere",