Paquete: @carloscortezcloud/tinkuy-agent · Repo: breakingthecloud/tinkuy · Ejemplos: examples/ · PyPI: no existe — npm-only

Última actualización: 2026-08-25 · v0.1.0v0.8.0 · Verificado desde git tag + npm view + tarball diff.

Overview

Versión Git tag Fecha (git) Fecha (npm) Resumen
0.8.0 v0.8.0 2026-08-14 2026-08-15 00:58 UTC Feedback hooks + correlación Qhaway
0.7.0 v0.7.0 2026-08-08 2026-08-08 14:05 UTC extractTextToolCall — rescata tool_calls en texto
0.6.0 (sin tag) 2026-08-02 21:09 UTC Ontology v1.1: enums, required, cardinality, meta
0.5.0 v0.5.0 2026-08-02 2026-08-02 19:49 UTC Ontology validator determinístico (T-Box/A-Box)
0.4.1 v0.4.1 2026-07-29 2026-07-29 23:28 UTC Parche streaming: onComplete + pnpm
0.4.0 (sin tag) 2026-07-29 02:27 UTC Agent.stream() + agentToSSE()
0.3.0 v0.3.0 2026-07-24 2026-07-24 22:28 UTC ConversationStore (memory + KV, TTL)
0.2.0 v0.2.0 2026-07-24 2026-07-24 22:11 UTC ToolRegistry (validate, group)
0.1.1 v0.1.1 2026-07-22 2026-07-22 23:36 UTC Fix ESM type: module
0.1.0 v0.1.0 2026-07-22 2026-07-22 23:32 UTC Initial: Agent + tool loop + budget (467 líneas)

Nota: 0.4.0 y 0.6.0 se publicaron a npm sin git tag. v0.4.1 y v0.7.0 son los tags que capturan el estado final de cada rango. Ver matriz de verificación al final.


v0.8.0 — 2026-08-14 — Feedback hooks + Qhaway

Tag: v0.8.0 @ ab81a2b · npm: 0.8.0 @ 2026-08-15T00:58:10.334Z · 62 files, ~178 KB

  • Agent.feedback(sessionId, rating) + AgentConfig.onFeedback — thumbs up/down vía evento AG-UI feedback por SSE
  • examples/08-feedback-ui.mjs, 09-feedback-qhaway.mjs — correlación session + cost/latencia (QhawaySpan)
  • examples/README.md tabla 01–09 como guías de desarrollo
await agent.feedback('s-123', { rating: 'thumbs_up', comment: 'clear!' });

→ Ver en GitHub (tag v0.8.0) · → npm 0.8.0


v0.7.0 — 2026-08-08 — extractTextToolCall

Tag: v0.7.0 @ 6fe637b · npm: 0.7.0 @ 2026-08-08T14:05:30.635Z · 62 files, ~173 KB

  • src/core/text-tool.ts: extractTextToolCall() — detecta {tool,arguments}, {name,args/input}, {tool_calls:[{function:{name,arguments}}]} con fence stripping
  • 17 tests · integrado en Agent.run() y Agent.stream() con anti-loop (max 2/req)
// El LLM responde con texto: '```json\n{"tool":"get_weather","arguments":{"city":"Lima"}}\n```'
// Tinkuy lo detecta, ejecuta get_weather y reinyecta el resultado.
for await (const e of agent.stream('Weather in Lima?')) { /* ... */ }

→ Ver en GitHub (tag v0.7.0) · → npm 0.7.0


v0.6.0 — 2026-08-02 — Ontology v1.1 (npm-only)

npm: 0.6.0 @ 2026-08-02T21:09:20.644Z · 58 files, ~163 KB · Tag: no existe (código entre v0.5.0 y v0.7.0)

  • loader.ts: parseProperties() — shorthand "UUID" o spec { type, required, enum, description } + VALID_CARDINALITIES + meta
  • types.ts: PropertySpec, Cardinality, min_instances/max_instances
  • validator.ts: checkCardinality(), checkInstanceCounts()cardinality_exceeded, missing_required_property, invalid_enum_value
  • Commit: 26c3a90 feat(ontology): schema v1.1

→ npm 0.6.0


v0.5.0 — 2026-08-02 — Ontology validator

Tag: v0.5.0 @ 328f9d9 · npm: 0.5.0 @ 2026-08-02T19:49:26.896Z · 58 files, ~140 KB

  • Nuevo src/ontology/loader.ts, validator.ts (CPU-only, $0 tokens), types.ts, errors.ts:OntologyViolationException
  • schema/tokenops_ontology.yaml — T-Box Client/Invoice + HAS_BILLING_DISPUTE + fail_on_unknown_relation
  • AgentConfig.ontology + hooks onOntologyValidated/onOntologyViolation · export "./ontology"
import { loadOntology } from '@carloscortezcloud/tinkuy-agent/ontology';
const schema = loadOntology(await readFile('schema/tokenops_ontology.yaml','utf8'));
const agent = new Agent({ router, ontology: schema });

Ver docs/ONTOLOGIES-101.md y examples/06-ontology.mjs.

→ Ver en GitHub (tag v0.5.0) · → npm 0.5.0


v0.4.1 — 2026-07-29 — Streaming patch

Tag: v0.4.1 @ d54aafd · npm: 0.4.1 @ 2026-07-29T23:28:19.050Z · 38 files, ~102 KB

  • Parche sobre 0.4.0: onComplete hook, fix nombres de paquete en README, tsconfig.exclude tests, migración a pnpm

→ Ver en GitHub (tag v0.4.1) · → npm 0.4.1


v0.4.0 — 2026-07-29 — Streaming + SSE (npm-only)

npm: 0.4.0 @ 2026-07-29T02:27:24.538Z · 38 files, ~97 KB · Tag: no existe (tag es v0.4.1)

  • Agent.stream() async generator (start, tool_call, tool_result, chunk, done, error) + src/sse.ts: agentToSSE() para Cloudflare Workers
for await (const evt of agent.stream('Explain FinOps')) {
  if (evt.type === 'chunk') process.stdout.write(evt.delta);
}

Ver examples/04-streaming-sse.mjs.

→ npm 0.4.0


v0.3.0 — 2026-07-24 — ConversationStore

Tag: v0.3.0 @ fa99db6 · npm: 0.3.0 @ 2026-07-24T22:28:37.777Z · 30 files, ~58 KB

  • src/conversation/index.tsMemoryConversationStore (sliding window, TTL) + KVConversationStore (Cloudflare KV)
  • agent.run('follow up', { sessionId }) con memoria · export "./conversation"
import { MemoryConversationStore } from '@carloscortezcloud/tinkuy-agent/conversation';
const store = new MemoryConversationStore({ maxMessages: 20, ttlMs: 30*60_1000 });
const agent = new Agent({ router, conversationStore: store });
await agent.run('My name is Carlos', { sessionId: 's1' });
await agent.run('What is my name?', { sessionId: 's1' });

→ Ver en GitHub (tag v0.3.0) · → npm 0.3.0


v0.2.0 — 2026-07-24 — ToolRegistry

Tag: v0.2.0 @ 5c830f8 · npm: 0.2.0 @ 2026-07-24T22:11:49.433Z · 26 files, ~48 KB

  • src/registry/index.ts (169 lines) — register(), registerAll(), byCategory(), validate() (snake_case, desc 10+ chars)
  • Export "./registry"
import { ToolRegistry } from '@carloscortezcloud/tinkuy-agent/registry';
const registry = new ToolRegistry();
registry.register(getWeather, 'weather');
registry.validate();

→ Ver en GitHub (tag v0.2.0) · → npm 0.2.0


v0.1.1 — 2026-07-22 — ESM fix

Tag: v0.1.1 @ 5551049 · npm: 0.1.1 @ 2026-07-22T23:36:23.271Z · 22 files

  • package.json: "type": "module" — fix ESM para Node 20+

→ Ver en GitHub (tag v0.1.1) · → npm 0.1.1


v0.1.0 — 2026-07-22 — Initial

Tag: v0.1.0 @ e534b48 · npm: 0.1.0 @ 2026-07-22T23:32:13.858Z · 22 files

  • Agent + defineTool + State — loop LLM → tool_calls → execute → feedback en 467 líneas · exports ".", "./agent", "./tools", "./state"
import { Agent, defineTool } from '@carloscortezcloud/tinkuy-agent';
const agent = new Agent({ router, guard, tools: [getWeather] });
await agent.run('Weather in Lima?');

→ Ver en GitHub (tag v0.1.0) · → npm 0.1.0


Matriz de verificación

Versión git tag git hash npm time dist/fileCount unpackedSize
0.8.0 v0.8.0 ab81a2b 2026-08-15T00:58:10.334Z 62 178,608
0.7.0 v0.7.0 6fe637b 2026-08-08T14:05:30.635Z 62 173,533
0.6.0 26c3a90 2026-08-02T21:09:20.644Z 58 163,225
0.5.0 v0.5.0 328f9d9 2026-08-02T19:49:26.896Z 58 140,311
0.4.1 v0.4.1 d54aafd 2026-07-29T23:28:19.050Z 38 102,084
0.4.0 5aea190 2026-07-29T02:27:24.538Z 38 97,653
0.3.0 v0.3.0 fa99db6 2026-07-24T22:28:37.777Z 30 58,398
0.2.0 v0.2.0 5c830f8 2026-07-24T22:11:49.433Z 26 48,830
0.1.1 v0.1.1 5551049 2026-07-22T23:36:23.271Z 22 36,229
0.1.0 v0.1.0 e534b48 2026-07-22T23:32:13.858Z 22 36,209

Repro:

git tag --list | sort -V
npm view @carloscortezcloud/tinkuy-agent versions --json
# PyPI: no existe — curl https://pypi.org/pypi/tinkuy/json → Not Found

Siguiente: cada versión arriba se convertirá en 1 blog post en /blog (o Dev.to) — ver cc-roadmap/oss-ecosystem/tinkuy/RELEASES-COMPLETE.md (privado) para slugs, ángulos y calendario editorial.