feat: implement MCP server with tools, Post API tests, auth middleware
- Create TryPostServer MCP server with 17 tools:
Post (List, Get, Create, Delete), Hashtag (List, Create, Update, Delete),
Label (List, Create, Update, Delete), Workspace (Get),
ApiKey (List, Create, Delete)
- Create AuthenticateMcpToken middleware (logs in workspace owner)
- Register mcp.auth middleware alias in bootstrap/app.php
- Create routes/ai.php with mcp.trypost.test subdomain
- Add PostApiTest with 6 tests (list, show, create, delete, isolation)
- Fix PostApiTest assertions for pagination/resource wrapping
- 704 tests passing, frontend build passing
2026-03-29 23:30:36 +00:00
|
|
|
<?php
|
|
|
|
|
|
refactor: settings redesign, Spanish translations, language system, strict_types
Settings pages:
- Redesign layout to match Sendkit (max-w-4xl, space-y-12, Separator sections)
- Merge Members page into Workspace settings with Table, invite Dialog, ConfirmDeleteModal
- Add workspace logo upload/delete routes and controller methods
- Translate all hardcoded strings in Workspace.vue modals
Language system:
- Drop languages table, replace language_id FK with locale string column on users
- Create config/languages.php for available languages and default locale
- Add Spanish (es) translations (13 files)
- Simplify HandleInertiaRequests, ProfileController, RegisteredUserController
Code quality:
- Add declare(strict_types=1) to all PHP files
- Fix MastodonPublisher using wrong attribute (filename -> original_filename)
- Fix HasMediaTest for new has_photo/photo_url accessors
- Fix PublishToSocialPlatformTest type error revealed by strict_types
- Remove orphaned Language model from AppServiceProvider morph map
- Update User TypeScript interface (has_photo, photo_url, locale)
- Eager load media relation on workspaces to prevent N+1
- Add 8 new tests for workspace logo upload/delete
- Update workspace settings test to assert members/invitations props
All 710 tests passing.
2026-03-30 03:20:43 +00:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
feat: implement MCP server with tools, Post API tests, auth middleware
- Create TryPostServer MCP server with 17 tools:
Post (List, Get, Create, Delete), Hashtag (List, Create, Update, Delete),
Label (List, Create, Update, Delete), Workspace (Get),
ApiKey (List, Create, Delete)
- Create AuthenticateMcpToken middleware (logs in workspace owner)
- Register mcp.auth middleware alias in bootstrap/app.php
- Create routes/ai.php with mcp.trypost.test subdomain
- Add PostApiTest with 6 tests (list, show, create, delete, isolation)
- Fix PostApiTest assertions for pagination/resource wrapping
- 704 tests passing, frontend build passing
2026-03-29 23:30:36 +00:00
|
|
|
use Laravel\Telescope\Http\Middleware\Authorize;
|
|
|
|
|
use Laravel\Telescope\Watchers;
|
|
|
|
|
|
|
|
|
|
return [
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Telescope Master Switch
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| This option may be used to disable all Telescope watchers regardless
|
|
|
|
|
| of their individual configuration, which simply provides a single
|
|
|
|
|
| and convenient way to enable or disable Telescope data storage.
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
refactor: organize middleware/requests into App/ subdirs, add Resources, fix auth routes
- Move middleware to App/ subdir (HandleInertiaRequests, HandleAppearance,
EnsureSubscribed, EnsureUserSetupIsComplete) matching Sendkit pattern
- Move all Form Requests into organized subdirs (App/Post, App/Workspace,
App/Media, App/Invite, App/Settings, App/Auth)
- Create AuthUserResource and AuthWorkspaceResource for HandleInertiaRequests
shared data (role inside currentWorkspace, matching Sendkit pattern)
- Split auth.php into 3 route groups (no middleware, guest, auth) matching
Sendkit pattern exactly
- Fix UserFactory to include all nullable attributes (current_workspace_id,
stripe_id, pm_type, pm_last_four, trial_ends_at)
- Fix SocialAccountResource (display_name not name)
- Update frontend for new auth prop structure
- 702 tests passing (2 pre-existing Mastodon failures)
2026-03-30 00:13:30 +00:00
|
|
|
'enabled' => env('TELESCOPE_ENABLED', false),
|
feat: implement MCP server with tools, Post API tests, auth middleware
- Create TryPostServer MCP server with 17 tools:
Post (List, Get, Create, Delete), Hashtag (List, Create, Update, Delete),
Label (List, Create, Update, Delete), Workspace (Get),
ApiKey (List, Create, Delete)
- Create AuthenticateMcpToken middleware (logs in workspace owner)
- Register mcp.auth middleware alias in bootstrap/app.php
- Create routes/ai.php with mcp.trypost.test subdomain
- Add PostApiTest with 6 tests (list, show, create, delete, isolation)
- Fix PostApiTest assertions for pagination/resource wrapping
- 704 tests passing, frontend build passing
2026-03-29 23:30:36 +00:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Telescope Domain
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| This is the subdomain where Telescope will be accessible from. If the
|
|
|
|
|
| setting is null, Telescope will reside under the same domain as the
|
|
|
|
|
| application. Otherwise, this value will be used as the subdomain.
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
'domain' => env('TELESCOPE_DOMAIN'),
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Telescope Path
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| This is the URI path where Telescope will be accessible from. Feel free
|
|
|
|
|
| to change this path to anything you like. Note that the URI will not
|
|
|
|
|
| affect the paths of its internal API that aren't exposed to users.
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
refactor: organize middleware/requests into App/ subdirs, add Resources, fix auth routes
- Move middleware to App/ subdir (HandleInertiaRequests, HandleAppearance,
EnsureSubscribed, EnsureUserSetupIsComplete) matching Sendkit pattern
- Move all Form Requests into organized subdirs (App/Post, App/Workspace,
App/Media, App/Invite, App/Settings, App/Auth)
- Create AuthUserResource and AuthWorkspaceResource for HandleInertiaRequests
shared data (role inside currentWorkspace, matching Sendkit pattern)
- Split auth.php into 3 route groups (no middleware, guest, auth) matching
Sendkit pattern exactly
- Fix UserFactory to include all nullable attributes (current_workspace_id,
stripe_id, pm_type, pm_last_four, trial_ends_at)
- Fix SocialAccountResource (display_name not name)
- Update frontend for new auth prop structure
- 702 tests passing (2 pre-existing Mastodon failures)
2026-03-30 00:13:30 +00:00
|
|
|
'path' => env('TELESCOPE_PATH', 'debug'),
|
feat: implement MCP server with tools, Post API tests, auth middleware
- Create TryPostServer MCP server with 17 tools:
Post (List, Get, Create, Delete), Hashtag (List, Create, Update, Delete),
Label (List, Create, Update, Delete), Workspace (Get),
ApiKey (List, Create, Delete)
- Create AuthenticateMcpToken middleware (logs in workspace owner)
- Register mcp.auth middleware alias in bootstrap/app.php
- Create routes/ai.php with mcp.trypost.test subdomain
- Add PostApiTest with 6 tests (list, show, create, delete, isolation)
- Fix PostApiTest assertions for pagination/resource wrapping
- 704 tests passing, frontend build passing
2026-03-29 23:30:36 +00:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Telescope Storage Driver
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| This configuration options determines the storage driver that will
|
|
|
|
|
| be used to store Telescope's data. In addition, you may set any
|
|
|
|
|
| custom options as needed by the particular driver you choose.
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
'driver' => env('TELESCOPE_DRIVER', 'database'),
|
|
|
|
|
|
|
|
|
|
'storage' => [
|
|
|
|
|
'database' => [
|
|
|
|
|
'connection' => env('DB_CONNECTION', 'mysql'),
|
|
|
|
|
'chunk' => 1000,
|
|
|
|
|
],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Telescope Queue
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| This configuration options determines the queue connection and queue
|
|
|
|
|
| which will be used to process ProcessPendingUpdate jobs. This can
|
|
|
|
|
| be changed if you would prefer to use a non-default connection.
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
'queue' => [
|
|
|
|
|
'connection' => env('TELESCOPE_QUEUE_CONNECTION'),
|
|
|
|
|
'queue' => env('TELESCOPE_QUEUE'),
|
|
|
|
|
'delay' => env('TELESCOPE_QUEUE_DELAY', 10),
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Telescope Route Middleware
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| These middleware will be assigned to every Telescope route, giving you
|
|
|
|
|
| the chance to add your own middleware to this list or change any of
|
|
|
|
|
| the existing middleware. Or, you can simply stick with this list.
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
'middleware' => [
|
|
|
|
|
'web',
|
|
|
|
|
Authorize::class,
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Allowed / Ignored Paths & Commands
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| The following array lists the URI paths and Artisan commands that will
|
|
|
|
|
| not be watched by Telescope. In addition to this list, some Laravel
|
|
|
|
|
| commands, like migrations and queue commands, are always ignored.
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
'only_paths' => [
|
|
|
|
|
// 'api/*'
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
'ignore_paths' => [
|
|
|
|
|
'livewire*',
|
|
|
|
|
'nova-api*',
|
|
|
|
|
'pulse*',
|
|
|
|
|
'_boost*',
|
|
|
|
|
'.well-known*',
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
'ignore_commands' => [
|
|
|
|
|
//
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Telescope Watchers
|
|
|
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
| The following array lists the "watchers" that will be registered with
|
|
|
|
|
| Telescope. The watchers gather the application's profile data when
|
|
|
|
|
| a request or task is executed. Feel free to customize this list.
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
'watchers' => [
|
|
|
|
|
Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true),
|
|
|
|
|
|
|
|
|
|
Watchers\CacheWatcher::class => [
|
|
|
|
|
'enabled' => env('TELESCOPE_CACHE_WATCHER', true),
|
|
|
|
|
'hidden' => [],
|
|
|
|
|
'ignore' => [],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
Watchers\ClientRequestWatcher::class => [
|
|
|
|
|
'enabled' => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true),
|
|
|
|
|
'ignore_hosts' => [],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
Watchers\CommandWatcher::class => [
|
|
|
|
|
'enabled' => env('TELESCOPE_COMMAND_WATCHER', true),
|
|
|
|
|
'ignore' => [],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
Watchers\DumpWatcher::class => [
|
|
|
|
|
'enabled' => env('TELESCOPE_DUMP_WATCHER', true),
|
|
|
|
|
'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false),
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
Watchers\EventWatcher::class => [
|
|
|
|
|
'enabled' => env('TELESCOPE_EVENT_WATCHER', true),
|
|
|
|
|
'ignore' => [],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true),
|
|
|
|
|
|
|
|
|
|
Watchers\GateWatcher::class => [
|
|
|
|
|
'enabled' => env('TELESCOPE_GATE_WATCHER', true),
|
|
|
|
|
'ignore_abilities' => [],
|
|
|
|
|
'ignore_packages' => true,
|
|
|
|
|
'ignore_paths' => [],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true),
|
|
|
|
|
|
|
|
|
|
Watchers\LogWatcher::class => [
|
|
|
|
|
'enabled' => env('TELESCOPE_LOG_WATCHER', true),
|
|
|
|
|
'level' => 'error',
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true),
|
|
|
|
|
|
|
|
|
|
Watchers\ModelWatcher::class => [
|
|
|
|
|
'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
|
|
|
|
|
'events' => ['eloquent.*'],
|
|
|
|
|
'hydrations' => true,
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true),
|
|
|
|
|
|
|
|
|
|
Watchers\QueryWatcher::class => [
|
|
|
|
|
'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
|
|
|
|
|
'ignore_packages' => true,
|
|
|
|
|
'ignore_paths' => [],
|
|
|
|
|
'slow' => 100,
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true),
|
|
|
|
|
|
|
|
|
|
Watchers\RequestWatcher::class => [
|
|
|
|
|
'enabled' => env('TELESCOPE_REQUEST_WATCHER', true),
|
|
|
|
|
'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64),
|
|
|
|
|
'ignore_http_methods' => [],
|
|
|
|
|
'ignore_status_codes' => [],
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true),
|
|
|
|
|
Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true),
|
|
|
|
|
],
|
|
|
|
|
];
|