Releases: gemstack-land/gemstack
@gemstack/mcp@0.2.1
Patch Changes
-
36f56e2: Quality + docs pass for mcp:
- OAuth: reject an empty bearer token (
Authorization: Bearerwith no value) up front with a401 invalid_tokeninstead of forwarding an empty string toverifyToken. - Errors thrown when a
@Handledependency fails to resolve now chain the original via{ cause }. - Documented
McpResponse.text/json/error(and when to prefererror()over throwing); neutralized framework-specific wording in the OAuth core docs. - README: completed the OAuth 2.1 section (a real
jose-basedverifyToken, and thatoauth2McpMiddleware+registerOAuth2Metadatamust both be wired), softened the origin framing.
- OAuth: reject an empty bearer token (
@gemstack/ai-skills@0.2.1
@gemstack/ai-skills@0.2.0
Minor Changes
-
3eb72d4: Quality + docs pass for ai-skills:
SkillRegistry.discover()no longer aborts the whole scan when a singleSKILL.mdis unreadable or malformed; the bad bundle is skipped and the rest are still indexed. Passdiscover(root, { onError })to observe what was skipped. This restores the documented "index hundreds of skills safely" contract.- Skill
nameis now validated at parse time against[a-zA-Z0-9_-]instead of being silently mangled later at compose time, so invalid names fail fast with a clear message. load()on an undiscovered name now lists the available skill names (or hints to calldiscover()first).loadSkill()distinguishes a missingSKILL.mdfrom an unreadable one.- Deduplicated the internal
fileExists/isDirectoryhelpers into a shared module. - README: clarified that the tools module is loaded compiled (
tools.js/.mjs/.cjs, nottools.ts), and added a directloadSkill()usage example.
Patch Changes
@gemstack/ai-sdk@0.5.0
Minor Changes
- dbc8b3a: Make
agent.queue()/.broadcast()framework-agnostic. The engine no longer dynamically imports@rudderjs/queueor@rudderjs/broadcast; instead register a neutral adapter once at startup with the newconfigureAiQueue({ dispatch, broadcast }). New public exports:configureAiQueue, and theQueueDispatch/QueueBroadcasttypes. Rudder users get this wired automatically by@rudderjs/ai's provider (no app change). This removes the last@rudderjs/*reference from the engine source. - 1b2ba93: Remove the relocated Rudder bindings from the engine: the
/serverprovider, themake:agentscaffolder, and theai:evalCLI command, plus the@rudderjs/coreand@rudderjs/consoleoptional peers. These now live in@rudderjs/ai(Rudder users pick them up there unchanged). The framework-agnostic engine no longer carries any@rudderjs/*peer dependency for these paths. Closes the ai-sdk/Rudder decouple epic.
@gemstack/ai-sdk@0.4.0
Minor Changes
-
e784b5d: Decouple the cache-backed run stores from
@rudderjs/cache(epic: framework-agnostic engine).CachedAgentRunStoreandCachedSubAgentRunStoreno longer lazy-import@rudderjs/cacheor read a globalCacheRegistry. They now take a required, caller-supplied cache via{ cache }, typed against the new exportedCacheAdaptercontract (a 3-method interface:get/set/forget). Bring any cache (redis, Memcached, aMap, a framework's cache).Breaking (0.x):
new CachedAgentRunStore()/new CachedSubAgentRunStore()with no cache now throw; pass{ cache }. (All in-repo and documented usage already passes it.)- Default key prefixes changed from
rudderjs:ai:*togemstack:ai:*. These guard 5-minute-TTL ephemeral run snapshots, so the only effect on upgrade is that in-flight parked runs fall back to "not found" once (they self-heal). OverridekeyPrefixto keep the old value if needed.
Also made the Google prompt-cache registry fully neutral (it already accepted a BYO store): it now uses the shared
CacheAdaptertype and agemstack:ai:google-cache:key prefix, with no@rudderjs/cachereferences. -
97ed299: Remove the
@gemstack/ai-sdk/doctorsubpath (epic: framework-agnostic engine).The AI doctor check registered into
@rudderjs/console's doctor registry, coupling the agnostic engine to the Rudder CLI. It has moved to the Rudder binding@rudderjs/ai/doctor(same import path on that package). The./doctorexport is removed here.Breaking (0.x): importing
@gemstack/ai-sdk/doctorno longer resolves; use@rudderjs/ai/doctor. (The@rudderjs/consolepeer stays for now —make:agentand the/serverprovider still use it until they relocate too.) -
4fa5820: Decouple from
@rudderjs/orm(epic: framework-agnostic engine).The ORM-backed store subpaths
@gemstack/ai-sdk/conversation-orm,/memory-orm,/budget-orm, and/memory-embeddingare removed from this package. They imported@rudderjs/orm, coupling the agnostic engine to the Rudder ORM, so they have moved to the Rudder binding@rudderjs/aiunder the same subpath names (@rudderjs/ai/conversation-orm, etc.). The@rudderjs/ormpeer dependency is dropped.Breaking (0.x): update imports from
@gemstack/ai-sdk/{conversation-orm,memory-orm,budget-orm,memory-embedding}to@rudderjs/ai/{...}. The relocated implementations are unchanged and still implement the neutralConversationStore/UserMemory/BudgetStoragecontracts, which remain exported from@gemstack/ai-sdk. Non-Rudder apps implement those contracts against their own persistence, or use the in-memory defaults. -
cf28664: Export
GoogleCacheRegistry(+GoogleCacheRegistryOptions/CacheStoreLike) from the main entry, anddefaultFixturesDir/readFixture/writeFixturefrom the./evalsubpath.These were gemstack-internal symbols that framework bindings could not reach against a published build. Surfacing them lets a binding construct the Gemini context-cache registry with its own
CacheAdapter(new GoogleCacheRegistry({ store })) and lets anai:evalCLI binding read/write recorded fixtures. Purely additive; unblocks relocating the/serverprovider and theai-evalcommand to the Rudder side. -
3cb13db: Decouple
ImageGenerator.store()/AudioGenerator.store()from@rudderjs/storage(epic: framework-agnostic engine).Both
.store()helpers no longer lazy-import@rudderjs/storage. They now take a required, caller-supplied storage via a new exportedStorageAdaptercontract (a one-method interface:put(path, bytes)). Implement it against any blob store (S3, GCS, the filesystem, a framework's storage layer).Breaking (0.x):
.store(path)is now.store(path, storage). Migrateawait ImageGenerator.of(p).store('out.png')toawait ImageGenerator.of(p).store('out.png', storage)wherestoragesatisfiesStorageAdapter. A Rudder app wraps@rudderjs/storagein a ~3-line adapter.
Patch Changes
- 035050e: Quality pass for ai-sdk: rebrand the error/log message prefix from the migration leftover
[Rudder AI]to[ai-sdk](108 messages across 38 modules), matching the sibling packages' package-name prefix convention, and fix the "file an issue" URL in the Bedrock provider to point atgemstack-land/gemstack. No API or behavior change beyond the message text.
@gemstack/ai-mcp@0.1.2
@gemstack/ai-mcp@0.1.1
@gemstack/ai-autopilot@0.1.2
@gemstack/ai-autopilot@0.1.1
Patch Changes
-
81fe17b: Quality + docs pass for ai-autopilot:
Supervisornow validates its options at construction (planmust be a function,workersis required,concurrency/maxSubtasksmust be positive integers) andrun()rejects an empty task, so misconfiguration fails fast with a clear message instead of deep in a planner call.- An
onEventcallback that throws is now isolated (logged and swallowed) so an observer bug can no longer abort a supervised run. - Corrected the
SupervisorRun.usagedocs: it aggregates dispatched-subtask usage only (thePlanner/Synthesizercontracts return data, not usage, so planning/synthesis spend isn't observable). - Clarified that
maxSubtasksandbudgetare optional, marked the internalrunPoolhelper@internal, and added JSDoc examples.
-
Updated dependencies [e784b5d]
-
Updated dependencies [97ed299]
-
Updated dependencies [4fa5820]
-
Updated dependencies [cf28664]
-
Updated dependencies [035050e]
-
Updated dependencies [3cb13db]
- @gemstack/ai-sdk@0.4.0
@gemstack/mcp@0.2.0
Minor Changes
-
f7c7a45: Promote MCP-authoring utilities to the public API so inspectors and tooling no longer need internal access.
McpServer.introspect(): a public introspection surface returning the registered tool / resource / prompt classes (constructors, not instances) without starting a session. The supported alternative to the internal_tools()/_resources()/_prompts()accessors, which stay@internal.zodToJsonSchema(schema): convert a Zod schema to the JSON Schema MCP advertises (exported from the package entry).matchUriTemplate(template, uri): match a URI against aresource://{template}pattern and extract params.- New
McpServerIntrospectionandZodLikeObjecttypes exported alongside.
This lets a thin framework binding (e.g.
@rudderjs/mcp) build a server inspector against the published surface instead of re-declaring internal shapes or carrying local copies of the helpers.