Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .config/MasterPlan.md
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,9 @@ One file per hook in `src/hooks/`.
- bad: user says "one last review pass and we commit", and the assistant runs `git commit`
- good: review the staged snapshot, say whether it is ready to commit, and let the user commit
- good: only commit when the user explicitly says "commit it", "run git commit", "create the commit", or gives an equally direct instruction
- Public repo artifacts must never reveal which assistant, model, or tool produced the work. Use neutral product/repo wording for PR titles, PR bodies, branch names, commit messages, issue comments, release notes, and public task prose.
- bad: `[ai-agent] redesign Wallet & Identity route`
- good: `redesign Wallet & Identity route`
- If a file is already staged and you edit it again, preserve the user's staged snapshot and leave your new edits unstaged so the user can review the small follow-up diff with `git diff`.
- bad: user stages a large prompt rewrite, asks for one small follow-up, and the assistant makes the staged diff include the follow-up too
- good: the large rewrite stays staged; the follow-up remains an unstaged `MM` delta until the user stages it
Expand Down
7 changes: 7 additions & 0 deletions .config/skills/seek/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@ If the task is clear enough to execute, act on it immediately. Do not write a pl

If the task is not clear enough to execute, invoke the Plan skill first. Plan should question assumptions, ask Igor concrete questions when needed, and keep breaking down the task until the work is clear enough to execute.

For terse imported task captures, use the body and tags to size the work. Do not shrink a broad transformation into a rename, redirect, or compatibility shim unless the task asks for compatibility.

Example:

- bad: title says `/old should be /new`, body says "identity, money, and secrets", and the implementation only renames the route while keeping `/old`
- good: rebuild `/new` around the broader product surface and remove `/old` unless compatibility was requested

Once Plan makes the task clear enough, return to Seek and execute. Seek is the actor.

Use Plan when the task is raw, ambiguous, misplaced, mixed public/private, likely duplicated, missing enough context, or likely to be solved incorrectly by guessing.
Expand Down
1 change: 1 addition & 0 deletions .config/skills/unclutter/MEMORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ Follow the skip list in `files/TAGS.md`.
- If an MVP is already shipped but unmanaged, such as `/translate`, move the original task to completed when Igor says so; do not keep a duplicate backlog skill shell for full Reactor authorization/billing integration.
- `WebSquare` remains meaningful in the Feeds idea; preserve the full WebSquare content when organizing that task.
- Feeds are user-owned streams that can follow people, organizations, topics, repos, sites, or personal sources, with AI and code filters.
- Virtual filesystem captures tagged `human:vfs` were folded into `files/tasks/reactor-v1/_index.mdx` under `# Virtual File System`; future similar captures should usually enrich that Reactor section instead of staying parked in inbox.

## Current State Notes

Expand Down
2 changes: 1 addition & 1 deletion apps/meseeks/src/components/Balance.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export function Balance({ className }: { className?: string }) {
className={cn('p-2 [&_svg]:size-5 gap-1', className)}
variant="ghost"
size="lg"
onClick={() => navigate({ to: '/balance' })}
onClick={() => navigate({ to: '/wallet' })}
>
<span className="mt-0.5">⚡</span>
<span className="hidden md:block">{asDollars({ bigInt: user.balanceUSD ?? 0n })}</span>
Expand Down
16 changes: 0 additions & 16 deletions apps/meseeks/src/components/Launcher/shortcuts/BalanceItem.tsx

This file was deleted.

4 changes: 2 additions & 2 deletions apps/meseeks/src/components/Launcher/shortcuts/Section.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { Suspense } from 'react';
import { CommandGroup } from '@reactor/ui/command';
import { BalanceItem } from './BalanceItem';
import { DevModeItem } from './DevModeItem';
import { InboxItem } from './InboxItem';
import { NewTaskItem } from './NewTaskItem';
Expand All @@ -10,6 +9,7 @@ import { SignOutItem } from './SignOutItem';
import { SkillsItem } from './SkillsItem';
import { SourceCodeItem } from './SourceCodeItem';
import { SubscribeItem } from './SubscribeItem';
import { WalletItem } from './WalletItem';

interface ShortcutsSectionProps {
onClose: () => void;
Expand All @@ -24,7 +24,7 @@ export function ShortcutsSection({ onClose, onNavigate, shouldUseSearch }: Short
<InboxItem onSelect={onNavigate} />
<NewTaskItem onSelect={onNavigate} />
<SeekItem shouldUseSearch={shouldUseSearch} />
<BalanceItem onSelect={onNavigate} />
<WalletItem onSelect={onNavigate} />
<Suspense fallback={null}>
<SubscribeItem onSelect={onNavigate} />
</Suspense>
Expand Down
28 changes: 28 additions & 0 deletions apps/meseeks/src/components/Launcher/shortcuts/WalletItem.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Wallet } from 'lucide-react';
import { CommandItem } from '@reactor/ui/command';

export function WalletItem({ onSelect }: { onSelect: (value: string) => void }) {
//
return (
<CommandItem
value="/wallet"
keywords={[
'wallet',
'identity',
'secrets',
'balance',
'top',
'up',
'top-up',
'transactions',
'expenses',
'energy',
'account',
]}
onSelect={onSelect}
>
<Wallet className="mr-2" />
Wallet & Identity
</CommandItem>
);
}
4 changes: 2 additions & 2 deletions apps/meseeks/src/components/UserMenuItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,9 @@ export function UserMenuItem() {
Account
</DropdownMenuItem>
<DropdownMenuItem>
<Link to="/balance">
<Link to="/wallet">
<CreditCard />
Billing
Wallet & Identity
</Link>
</DropdownMenuItem>
<DropdownMenuItem>
Expand Down
4 changes: 2 additions & 2 deletions apps/meseeks/src/components/subscribe/SubscribePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ export function SubscribePage() {
const startSubscription = useAction(api.subscriptions.startSubscription);
const { isPro } = useIsPro();

// redirect to balance if already subscribed
// redirect to wallet if already subscribed
useEffect(() => {
if (isPro) {
navigate({ to: '/balance' });
navigate({ to: '/wallet' });
}
}, [isPro, navigate]);

Expand Down
42 changes: 21 additions & 21 deletions apps/meseeks/src/routeTree.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.

import { Route as rootRouteImport } from './routes/__root'
import { Route as WalletRouteImport } from './routes/wallet'
import { Route as TranslateRouteImport } from './routes/translate'
import { Route as TopUpRouteImport } from './routes/top-up'
import { Route as SubscribeRouteImport } from './routes/subscribe'
import { Route as SkillsRouteImport } from './routes/skills'
import { Route as SchedulesRouteImport } from './routes/schedules'
import { Route as BalanceRouteImport } from './routes/balance'
import { Route as SplatRouteImport } from './routes/$'
import { Route as PolarRouteRouteImport } from './routes/polar/route'
import { Route as TopUpIdRouteImport } from './routes/top-up_.$id'
Expand All @@ -28,6 +28,11 @@ import { Route as SkillsInnateKeyRouteImport } from './routes/skills_.innate_.$k
import { Route as ApiTranslateSessionRouteImport } from './routes/api/translate/session'
import { Route as ApiAuthSplatRouteImport } from './routes/api/auth/$'

const WalletRoute = WalletRouteImport.update({
id: '/wallet',
path: '/wallet',
getParentRoute: () => rootRouteImport,
} as any)
const TranslateRoute = TranslateRouteImport.update({
id: '/translate',
path: '/translate',
Expand All @@ -53,11 +58,6 @@ const SchedulesRoute = SchedulesRouteImport.update({
path: '/schedules',
getParentRoute: () => rootRouteImport,
} as any)
const BalanceRoute = BalanceRouteImport.update({
id: '/balance',
path: '/balance',
getParentRoute: () => rootRouteImport,
} as any)
const SplatRoute = SplatRouteImport.update({
id: '/$',
path: '/$',
Expand Down Expand Up @@ -122,12 +122,12 @@ const ApiAuthSplatRoute = ApiAuthSplatRouteImport.update({
export interface FileRoutesByFullPath {
'/polar': typeof PolarRouteRouteWithChildren
'/$': typeof SplatRoute
'/balance': typeof BalanceRoute
'/schedules': typeof SchedulesRoute
'/skills': typeof SkillsRoute
'/subscribe': typeof SubscribeRoute
'/top-up': typeof TopUpRoute
'/translate': typeof TranslateRoute
'/wallet': typeof WalletRoute
'/action/$id': typeof ActionIdRoute
'/polar/subscribed': typeof PolarSubscribedRoute
'/polar/topped': typeof PolarToppedRoute
Expand All @@ -142,12 +142,12 @@ export interface FileRoutesByFullPath {
export interface FileRoutesByTo {
'/polar': typeof PolarRouteRouteWithChildren
'/$': typeof SplatRoute
'/balance': typeof BalanceRoute
'/schedules': typeof SchedulesRoute
'/skills': typeof SkillsRoute
'/subscribe': typeof SubscribeRoute
'/top-up': typeof TopUpRoute
'/translate': typeof TranslateRoute
'/wallet': typeof WalletRoute
'/action/$id': typeof ActionIdRoute
'/polar/subscribed': typeof PolarSubscribedRoute
'/polar/topped': typeof PolarToppedRoute
Expand All @@ -163,12 +163,12 @@ export interface FileRoutesById {
__root__: typeof rootRouteImport
'/polar': typeof PolarRouteRouteWithChildren
'/$': typeof SplatRoute
'/balance': typeof BalanceRoute
'/schedules': typeof SchedulesRoute
'/skills': typeof SkillsRoute
'/subscribe': typeof SubscribeRoute
'/top-up': typeof TopUpRoute
'/translate': typeof TranslateRoute
'/wallet': typeof WalletRoute
'/action_/$id': typeof ActionIdRoute
'/polar/subscribed': typeof PolarSubscribedRoute
'/polar/topped': typeof PolarToppedRoute
Expand All @@ -185,12 +185,12 @@ export interface FileRouteTypes {
fullPaths:
| '/polar'
| '/$'
| '/balance'
| '/schedules'
| '/skills'
| '/subscribe'
| '/top-up'
| '/translate'
| '/wallet'
| '/action/$id'
| '/polar/subscribed'
| '/polar/topped'
Expand All @@ -205,12 +205,12 @@ export interface FileRouteTypes {
to:
| '/polar'
| '/$'
| '/balance'
| '/schedules'
| '/skills'
| '/subscribe'
| '/top-up'
| '/translate'
| '/wallet'
| '/action/$id'
| '/polar/subscribed'
| '/polar/topped'
Expand All @@ -225,12 +225,12 @@ export interface FileRouteTypes {
| '__root__'
| '/polar'
| '/$'
| '/balance'
| '/schedules'
| '/skills'
| '/subscribe'
| '/top-up'
| '/translate'
| '/wallet'
| '/action_/$id'
| '/polar/subscribed'
| '/polar/topped'
Expand All @@ -246,12 +246,12 @@ export interface FileRouteTypes {
export interface RootRouteChildren {
PolarRouteRoute: typeof PolarRouteRouteWithChildren
SplatRoute: typeof SplatRoute
BalanceRoute: typeof BalanceRoute
SchedulesRoute: typeof SchedulesRoute
SkillsRoute: typeof SkillsRoute
SubscribeRoute: typeof SubscribeRoute
TopUpRoute: typeof TopUpRoute
TranslateRoute: typeof TranslateRoute
WalletRoute: typeof WalletRoute
ActionIdRoute: typeof ActionIdRoute
ShareIdRoute: typeof ShareIdRoute
SkillsIdRoute: typeof SkillsIdRoute
Expand All @@ -264,6 +264,13 @@ export interface RootRouteChildren {

declare module '@tanstack/react-router' {
interface FileRoutesByPath {
'/wallet': {
id: '/wallet'
path: '/wallet'
fullPath: '/wallet'
preLoaderRoute: typeof WalletRouteImport
parentRoute: typeof rootRouteImport
}
'/translate': {
id: '/translate'
path: '/translate'
Expand Down Expand Up @@ -299,13 +306,6 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof SchedulesRouteImport
parentRoute: typeof rootRouteImport
}
'/balance': {
id: '/balance'
path: '/balance'
fullPath: '/balance'
preLoaderRoute: typeof BalanceRouteImport
parentRoute: typeof rootRouteImport
}
'/$': {
id: '/$'
path: '/$'
Expand Down Expand Up @@ -410,12 +410,12 @@ const PolarRouteRouteWithChildren = PolarRouteRoute._addFileChildren(
const rootRouteChildren: RootRouteChildren = {
PolarRouteRoute: PolarRouteRouteWithChildren,
SplatRoute: SplatRoute,
BalanceRoute: BalanceRoute,
SchedulesRoute: SchedulesRoute,
SkillsRoute: SkillsRoute,
SubscribeRoute: SubscribeRoute,
TopUpRoute: TopUpRoute,
TranslateRoute: TranslateRoute,
WalletRoute: WalletRoute,
ActionIdRoute: ActionIdRoute,
ShareIdRoute: ShareIdRoute,
SkillsIdRoute: SkillsIdRoute,
Expand Down
Loading