This is the snapshot the production landing site (nibiru-framework.com) is deployed from. Brings together the recent splash + docs migration to the v4 "Cosmos" design system, the new in-framework AI module, and the framework groundwork that backs the framework-reference extraction. What lands: - docs/: Astro + Starlight site with the v4 dark cosmic palette, GalaxyHero canvas constellation, Mission Control chat (wired to /api/oracle → api.neuronetz.ai via providers.mjs Ollama), 5-panel MMVC stage (Model · AI · Module · Controller · View), translated EN/DE/JA/ES/FR content, PWA + sitemap + llms.txt + Umami analytics. - docs/design-system/: canonical mockup bundle (source/index-v2.html for splash, source/docs-system.html + preview/ for docs, SPEC.md, tokens). - docs/scripts/extraction/framework-reference-v2.md: deep framework reference (~1.6k lines, file:line citations, every public factory and idiom — basis for the LoRA training corpus. - application/module/ai/: AI module with chat / embed / RAG / agent plugins, plus pdoQuery / httpGet / fileRead tools and Modelfile + smoke-test in training/. - application/module/users/: user / ACL / form-factory traits used as the reference plugin pattern for the framework docs. - application/settings/config/database/: schema + seed migrations including the AI module tables (200–203). - Form factory + autogenerator changes the framework-reference-v2 covers. Production secrets stay out: docs/.env, settings.production.ini and ai.production.ini are all gitignored (.example files are in tree). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
54 lines
1.6 KiB
PHP
54 lines
1.6 KiB
PHP
<?php
|
|
namespace Nibiru\Module\Ai\Plugins;
|
|
|
|
/**
|
|
* Base class for an Agent tool. Extend this to expose any PHP capability
|
|
* to the Nibiru agent runtime.
|
|
*
|
|
* A tool has three things:
|
|
* - a `name()` — the agent calls it by this name
|
|
* - a `schema()` — JSON-schema-like description of inputs (drives the
|
|
* agent's tool-call decoding)
|
|
* - an `execute($args)` — the actual implementation, returning a string
|
|
* (or scalar) that the agent will read back as observation.
|
|
*
|
|
* Built-in tools live alongside this file: PdoQuery, HttpGet, ViewAssign,
|
|
* FormBuild, FileRead. You can write your own and pass them in via
|
|
* Agent::withTools([...]).
|
|
*/
|
|
abstract class Tool
|
|
{
|
|
abstract public function name(): string;
|
|
|
|
abstract public function description(): string;
|
|
|
|
/**
|
|
* @return array<string, array{type:string, description:string, required?:bool}>
|
|
*/
|
|
abstract public function schema(): array;
|
|
|
|
/**
|
|
* Run the tool. Return a string (or scalar) — the agent will pass
|
|
* this string back into the LLM as a tool observation.
|
|
*/
|
|
abstract public function execute(array $args): mixed;
|
|
|
|
/**
|
|
* Render the tool definition as the agent's prompt sees it.
|
|
*/
|
|
public function asPrompt(): string
|
|
{
|
|
$schema = $this->schema();
|
|
$args = [];
|
|
foreach ($schema as $key => $def) {
|
|
$args[] = " - $key ({$def['type']}): " . ($def['description'] ?? '');
|
|
}
|
|
return sprintf(
|
|
"Tool: %s\nWhat it does: %s\nArguments:\n%s",
|
|
$this->name(),
|
|
$this->description(),
|
|
implode("\n", $args)
|
|
);
|
|
}
|
|
}
|