Commit graph

27 commits

Author SHA1 Message Date
Snider
294e73e189 feat(footer): add customizable footer component with dynamic content and links 2026-01-26 20:46:49 +00:00
Snider
b0e3ef461f feat(workspace): implement workspace teams and permissions management with enhanced member model 2026-01-26 19:00:50 +00:00
Snider
537f01672b feat(database): create mcp_tool_versions table and model for versioned tool management 2026-01-26 18:25:23 +00:00
Snider
7631afb12e feat(docs): update TODO list with completed documentation tasks and add new guides for service contracts, seeder system, and SQL security 2026-01-26 18:22:50 +00:00
Snider
62c23b7fe9 feat(webhooks): implement entitlement webhook management with delivery tracking and event handling 2026-01-26 17:52:21 +00:00
Snider
36f524cc5c feat(api): add API versioning support with middleware for version parsing and sunset headers 2026-01-26 16:59:47 +00:00
Snider
f1c4c8f46d feat: add initial framework files including API, console, and web routes; set up testing structure 2026-01-26 14:25:55 +00:00
Snider
e498a1701e refactor: update namespaces and remove deprecated biolinks route; enhance API documentation attributes 2026-01-26 14:24:42 +00:00
Snider
02125e8234 feat(quota): implement workspace quota management with usage tracking and analytics 2026-01-26 14:24:35 +00:00
Snider
cc6cf23ff0 refactor: update references from 'biolink' to 'page' and improve seeder structure 2026-01-26 14:24:25 +00:00
Snider
b8531676e2 feat(search): implement global search component with keyboard navigation and recent searches 2026-01-26 14:24:15 +00:00
Snider
edb34e38d5 fix(privacy): hash IP addresses in referral tracking for GDPR compliance
- ReferralController now stores ip_hash (SHA-256) instead of raw IP in session
- Cookie excludes IP entirely (only stores provider/model/timestamp)
- PlantTreeForAgentReferral uses hashed IPs in tree metadata
- Updated test to verify hashed IP storage

Raw IPs should not be stored in cookies or persisted unnecessarily.
Session-only hashed IP is sufficient for fraud detection.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 00:39:07 +00:00
Snider
c8dfc2a8a9 refactor: remove deprecated code for v0.0.1 release
- Remove deprecated device chrome properties and methods from Editor
- Remove deprecated ConfigResolver::bootKeys() and lazy load instead
- Remove deprecated ConfigValue::find() method
- Remove deprecated StorageOffload::getHumanSizeAttribute() accessor
- Clean up API controllers (already using resolveWorkspace trait)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 23:36:01 +00:00
Snider
65dd9af950 refactor: consolidate migrations and clean up core packages
- Remove old incremental migrations (now consolidated into create_* files)
- Clean up cached view files
- Various fixes across core-api, core-mcp, core-php packages

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 22:28:58 +00:00
Snider
1f1c8d0496 fix: add tier columns to users table, remove app-specific seeder
- Add tier and tier_expires_at columns to users table in create migration
- Remove SystemUserSeeder (moved to host.uk.com as it uses app-specific models)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 22:20:54 +00:00
Snider
5919bca336 Convert login form to use Flux UI components
Replace raw HTML form elements with Flux UI equivalents:
- flux:heading and flux:subheading for title
- flux:input for email and password fields
- flux:checkbox for remember me
- flux:link for back navigation

Flux UI components integrate properly with Livewire and
handle loading states automatically.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 12:00:30 +00:00
Snider
f6c688d4e1 Fix login button showing all states at once
- Add @fluxAppearance and @fluxScripts to Demo layout
- Replace custom button with flux:button component
- Flux button handles loading states internally

The wire:loading directives weren't working because Livewire's
CSS wasn't being parsed by the browser (style sheet not applied).
Using Flux's button component resolves this cleanly.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 11:55:23 +00:00
Snider
febfeb5fdb Fix AdminMenuProvider interface compatibility
Add HasMenuPermissions trait to classes implementing AdminMenuProvider:
- Website\Hub\Boot
- Core\Mod\Hub\Boot

The trait provides default implementations for the new menuPermissions()
and canViewMenu() methods added to the AdminMenuProvider interface.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 11:39:28 +00:00
Snider
2d348f4c2d Update RELEASE-BLOCKERS.md: mark medium issues fixed
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 20:03:13 +00:00
Snider
13670ebb34 Add dependency guards and PHPDoc documentation
Dependency guards for optional modules:
- Remove hard use statements for Core\Mod\*, Core\Plug\* classes
- Add class_exists() guards before using optional dependencies
- Change type hints to ?object with docblock annotations
- Add fallback behavior when optional modules not installed

Files with dependency guards added:
- Cdn/Console/CdnPurge.php (Workspace, Purge)
- Cdn/Console/PushAssetsToCdn.php (VBucket)
- Cdn/Boot.php (CdnManager, StorageManager)
- Cdn/Jobs/PushAssetToCdn.php (StorageManager)
- Front/Admin/AdminMenuRegistry.php (User, Workspace, EntitlementService)
- Front/Admin/Contracts/*.php (User, Workspace)
- Front/Admin/View/Components/Sidemenu.php (User, WorkspaceService)
- Front/Mcp/McpContext.php (AgentPlan)

Comprehensive PHPDoc documentation:
- ModuleScanner.php - Scanner mechanics and priority system
- ModuleRegistry.php - Registration flow and querying
- LazyModuleListener.php - Lazy loading mechanism
- LifecycleEventProvider.php - Lifecycle phases
- All Event classes - When fired, context, examples
- Service contracts - HealthCheckable, ServiceDefinition
- Admin contracts - AdminMenuProvider, DynamicMenuProvider

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 19:24:39 +00:00
Snider
c6993dbfca Prepare for open-source release
Remove internal branding:
- Replace "Snide" codename with "Core" in documentation
- Remove "host-uk/core" package name check in Boot.php
- Remove company references from CDN service comments
- Remove hardcoded fallback domains

Improve generated code clarity:
- Add [USER] prefix to TODO comments in MakePlugCommand templates
- Add header comments explaining generated files need implementation
- Convert dashboard TODOs to placeholder UI sections
- Remove internal roadmap TODOs from route files

Add EUPL-1.2 license headers:
- Added license header to 231 PHP files
- Skipped 208 Blade templates (HTML, not PHP)

Update release documentation:
- Mark critical and high issues as fixed in RELEASE-BLOCKERS.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 18:45:52 +00:00
Snider
e5d08be8c7 Update .gitignore to exclude additional vendor and storage directories 2026-01-21 20:22:19 +00:00
Snider
606176585c Fix critical and high severity issues from code review
Security fixes:
- Fix XSS in JSON-LD output via JSON_HEX_TAG (Seo module)
- Fix SQL injection via LIKE wildcards (Config module)
- Fix regex injection in env updates (Console module)
- Fix weak token hashing with HMAC-SHA256 (CDN module)
- Mask database credentials in install output (Console module)

New features:
- Add MakeModCommand, MakePlugCommand, MakeWebsiteCommand scaffolds
- Add event prioritization via array syntax in $listens
- Add EventAuditLog for tracking handler execution and failures
- Add ServiceVersion with semver and deprecation support
- Add HealthCheckable interface with HealthCheckResult
- Add ServiceStatus enum for service health states
- Add DynamicMenuProvider for uncached menu items
- Add LangServiceProvider with auto-discovery and fallback chains

Improvements:
- Add retry logic with exponential backoff (CDN uploads)
- Add file size validation before uploads (100MB default)
- Add key rotation mechanism for LthnHash
- Add Unicode NFC normalization to Sanitiser
- Add configurable filter rules per field (Input)
- Add menu caching with configurable TTL (Admin)
- Add Redis fallback alerting via events (Storage)
- Add Predis support alongside phpredis (Storage)
- Add memory safety checks for image processing (Media)
- Add SchemaValidator for schema.org validation (SEO)
- Add translation key validation in dev environments

Bug fixes:
- Fix nested array filtering returning null (Sanitiser)
- Fix race condition in EmailShieldStat increment
- Fix stack overflow on deep JSON nesting (ConfigResolver)
- Fix missing table existence check (BlocklistService)
- Fix missing class_exists guards (Search, Media)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 20:20:14 +00:00
Snider
b26c430cd6 Add core components and initial setup for the PHP framework 2026-01-21 14:11:45 +00:00
Snider
d6fbabf4d9 Add .gitkeep to track empty directories 2026-01-21 14:08:04 +00:00
Snider
713cbc601d Add Font Awesome Pro to admin layout
Load Font Awesome Pro CSS in admin layout using Cdn::versioned helper
for cache-busted asset loading.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 14:05:51 +00:00
Snider
392678e68a Initial release: Core PHP modular monolith framework
- Event-driven architecture with lazy module loading
- ModuleScanner, ModuleRegistry, LazyModuleListener for module discovery
- 7 lifecycle events: Web, Admin, API, Client, Console, MCP, FrameworkBooted
- AdminMenuProvider and ServiceDefinition contracts
- Artisan commands: make:mod, make:website, make:plug
- Module stubs for rapid scaffolding
- Comprehensive test suite with Orchestra Testbench
- GitHub Actions CI for PHP 8.2-8.4 / Laravel 11-12
- EUPL-1.2 license

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 17:02:28 +00:00