Analysis Date: December 11, 2025 Analyst: Claude (commissioned by ryoppippi)
This report analyzes code similarities between the following projects.
┌─────────────────────────────────────────────────────────────────┐
│ Original (by samchon) │
│ ┌─────────────┐ │
│ │ typia │ ← TypeScript Transformer Library │
│ └──────┬──────┘ │
│ │ Applied to │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ wrtnlabs/agentica │ ← LLM Function Calling Framework │
│ │ (uses typia) │ Led by samchon │
│ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Related Project (by ryoppippi) │
│ ┌─────────────────────┐ │
│ │ unplugin-typia │ ← Plugin to make typia work with │
│ └─────────────────────┘ various bundlers │
└─────────────────────────────────────────────────────────────────┘
↓↓↓ Suspected Reference/Imitation ↓↓↓
┌─────────────────────────────────────────────────────────────────┐
│ Later Entry (by Symbolica) │
│ ┌──────────────────────────────┐ │
│ │ agentica-typescript-sdk │ ← Published Dec 9, 2025 │
│ │ (@symbolica/agentica) │ Same name, same approach │
│ └──────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
agentica-typescript-sdk is strongly suspected of referencing/imitating the following:
- wrtnlabs/agentica (by samchon) - Project name and overall concept
- typia (by samchon) - Transformer design patterns
- unplugin-typia (by ryoppippi) - Bundler integration code (especially
getTsCompilerOptionfunction)
| Project | Author | Description | License |
|---|---|---|---|
| typia | samchon | TypeScript transformer library. Generates runtime validation and JSON schemas from type information | MIT |
| wrtnlabs/agentica | samchon (Wrtn Technologies) | LLM Function Calling framework based on typia | MIT |
| unplugin-typia | ryoppippi | unplugin to make typia work with Vite/Webpack/Rollup etc. | MIT |
| Project | Author | Description | License |
|---|---|---|---|
| agentica-typescript-sdk | Symbolica AI, Inc. | AI agent SDK with proprietary transformer | Symbolica Source-Available License (restrictive) |
| Date | Event |
|---|---|
| ~2024 | typia established as TypeScript transformer |
| ~2024 | unplugin-typia (by ryoppippi) published |
| Around Feb 13, 2025 | wrtnlabs/agentica first release |
| Dec 9, 2025 | symbolica/agentica-typescript-sdk first release (about 10 months later) |
| Aspect | wrtnlabs/agentica | symbolica/agentica-typescript-sdk |
|---|---|---|
| Name | "Agentica" | "Agentica" (exact match) |
| Core Tech | TypeScript Transformer to extract type info at compile-time | TypeScript Transformer to extract type info at compile-time |
| Purpose | Make LLM call TypeScript functions | Make LLM call TypeScript functions |
| Approach | Type info → JSON Schema → LLM Function Calling | Type info → Custom protocol → LLM invocation |
Observation: The core idea "Extract TypeScript type information at compile-time and utilize it for LLM Function Calling" is identical.
wrtnlabs/agentica usage:
import { Agentica } from "@agentica/core";
import typia from "typia";
const agent = new Agentica({
vendor: { api: new OpenAI(), model: "gpt-4o-mini" },
controllers: [
typia.llm.controller<MyService, "chatgpt">("name", new MyService()),
],
});
await agent.conversate("User input");symbolica/agentica-typescript-sdk usage:
import { agentic } from '@symbolica/agentica';
async function analyze(text: string): Promise<"positive" | "neutral" | "negative"> {
return await agentic('Analyze sentiment', { text });
}Observation: While API designs differ, the core concept of "automatically passing TypeScript type information to LLM" is identical.
Both projects provide a "magical" experience where users don't need to explicitly write schemas:
| Project | How the "Magic" Works |
|---|---|
| typia/agentica | typia.llm.application<T>() analyzes type T at compile-time to generate schema |
| symbolica/agentica | agentic() call analyzes surrounding scope at compile-time |
This is the most obvious issue.
- wrtnlabs published first with the name "Agentica"
- Symbolica later uses the same name "Agentica"
- Package names are also similar:
@agentica/*vs@symbolica/agentica
This is the most important point for ryoppippi (the requester).
unplugin-typia (by ryoppippi):
packages/unplugin-typia/src/
├── core/
│ ├── index.ts # UnpluginFactory
│ ├── typia.ts # transformTypia, getTsCompilerOption
│ └── options.ts
├── vite.ts
├── webpack.ts
├── esbuild.ts
└── rollup.ts
agentica-typescript-sdk:
src/
├── agentica-unplugin.ts # UnpluginFactory, getTsCompilerOption
├── bundlers/
│ ├── vite.ts
│ ├── webpack.ts
│ ├── esbuild.ts
│ └── rollup.ts
vite.ts, webpack.ts) is the official pattern recommended by unplugin, so this structural similarity itself is not evidence.
unplugin-typia (by ryoppippi) - core/typia.ts:
async function getTsCompilerOption(cacheEnable = true, tsconfigId?: string): Promise<ts.CompilerOptions> {
const parseTsCompilerOptions = async () => {
const readFile = (path: string) => ts.sys.readFile(path);
const id = (tsconfigId != null) ? resolve(tsconfigId) : await resolveTSConfig();
const tsconfigParseResult = ts.readConfigFile(id, readFile);
if (tsconfigParseResult.error != null) {
throw new Error(tsconfigParseResult.error.messageText.toString());
}
const tsconfig = ts.parseJsonConfigFileContent(
tsconfigParseResult.config,
ts.sys,
dirname(id)
);
return tsconfig.options;
};
// ...
}agentica-typescript-sdk - agentica-unplugin.ts:
async function getTsCompilerOption(tsconfigId?: string): Promise<ts.CompilerOptions> {
const readFile = (path: string) => ts.sys.readFile(path);
let id: string;
try {
id = tsconfigId != null ? resolve(tsconfigId) : await resolveTSConfig();
} catch {
throw new Error(/* error message */);
}
const tsconfigParseResult = ts.readConfigFile(id, readFile);
if (tsconfigParseResult.error != null) {
throw new Error(`Failed to parse tsconfig.json: ${tsconfigParseResult.error.messageText.toString()}`);
}
const baseDir = dirname(id);
const tsconfig = ts.parseJsonConfigFileContent(
tsconfigParseResult.config,
ts.sys,
baseDir
);
return tsconfig.options;
}Similarities:
- Function name exact match:
getTsCompilerOption - Use of
resolveTSConfig()(from pkg-types) - Flow of
ts.readConfigFile()→ts.parseJsonConfigFileContent() - Pattern of passing
dirname(id)as 3rd argument - Error handling pattern
Observation: This function was clearly written by referencing unplugin-typia code. Variable names and processing flow are remarkably similar.
unplugin-typia:
// vite.ts
import unplugin from './core/index.js';
const vite: typeof unplugin.vite = unplugin.vite;
export default vite;agentica-typescript-sdk:
// bundlers/vite.ts
import { unpluginAgentica } from '../agentica-unplugin.js';
export default unpluginAgentica.vite;From official README:
"Agentic AI framework specialized in AI Function Calling."
"Don't be afraid of AI agent development. Just list functions from three protocols below."
- TypeScript Class
- Swagger/OpenAPI Document
- MCP (Model Context Protocol) Server
Features:
- Solves the "difficulty" and "instability" of LLM Function Calling
- Developers just prepare functions to create AI agents
- Type-safe schema generation via typia
- Validation Feedback to detect and correct AI mistakes
From official README:
"Agentica is a type-safe AI framework that lets LLM agents integrate with your code—functions, classes, live objects, even entire SDKs."
Features:
- Type-safe AI framework
- Can pass functions and classes to LLM
- Proprietary type system traversal (SchemaTraversal)
- OpenTelemetry integration
| Aspect | wrtnlabs/agentica | symbolica/agentica-typescript-sdk |
|---|---|---|
| Main Purpose | Make LLM call TypeScript functions | Make LLM call TypeScript functions |
| Type Safety | Type validation via typia | Type extraction via proprietary transformer |
| Target Audience | Backend developers | TypeScript developers in general |
| Differentiation | OpenAPI/Swagger integration, MCP support | Proprietary protocol, OTel integration |
Observation: Purposes are essentially identical. They share the vision of "making LLM Function Calling easy and safe by leveraging TypeScript type information."
wrtnlabs/agentica:
{
"peerDependencies": {
"typia": "catalog:typia",
"@samchon/openapi": "catalog:typia"
},
"devDependencies": {
"@ryoppippi/unplugin-typia": "catalog:typia"
}
}→ Depends on typia ecosystem
agentica-typescript-sdk:
{
"dependencies": {
"unplugin": "^2.3.10",
"pkg-types": "^2.3.0"
}
}→ Does not depend on typia, implements proprietary transformer
| Aspect | typia/agentica | symbolica/agentica-typescript-sdk |
|---|---|---|
| Type Traversal | typia's Metadata system | Proprietary SchemaTraversal class |
| Output Format | JSON Schema (LLM vendor compatible) | Proprietary DefMsg protocol |
| Extensibility | typia ecosystem | Proprietary ecosystem |
| Project | License | Restrictions |
|---|---|---|
| typia | MIT | None |
| wrtnlabs/agentica | MIT | None |
| unplugin-typia | MIT | None |
| symbolica/agentica-typescript-sdk | Symbolica Source-Available | "Restricted Service" restrictions |
Observation: Symbolica references code patterns from MIT-licensed projects while adopting a restrictive license for itself.
| Category | Similarity | Evidence Value | Description |
|---|---|---|---|
| Project Name | 🔴 100% | High | "Agentica" exact match |
| Core Concept | 🔴 95% | High | TypeScript types → LLM Function Calling idea |
getTsCompilerOption function |
🔴 90% | Very High | Nearly identical implementation (ryoppippi's code, NOT official unplugin pattern) |
| Transformer patterns | 🟠 70% | Medium | Similar design philosophy (though constrained by TS Transformer API) |
| unplugin structure | 🟢 80% | Low | NOT evidence - official unplugin recommended pattern |
| bundler exports | 🟢 75% | Low | NOT evidence - official unplugin recommended pattern |
| Actual business logic | 🟡 40% | N/A | Many proprietary implementations |
High probability that it references/imitates wrtnlabs/agentica and related projects (typia, unplugin-typia).
Evidence:
- Exact project name match: "Agentica" - unlikely to be coincidence
- Identical core concept: TypeScript Transformer extracting type info → LLM Function Calling
getTsCompilerOptionfunction similarity: Nearly identical to ryoppippi's unplugin-typia code (this is NOT an official unplugin pattern)- Timeline: Symbolica version is clearly later (about 10 months after)
- Same problem space: Solving the same problem (type safety in LLM Function Calling) with the same approach
Valid Evidence:
- ✅ Project name match
- ✅
getTsCompilerOptionfunction implementation (NOT official unplugin pattern, but ryoppippi's implementation) - ✅ Core concept match
- ❌ unplugin directory structure (official recommended pattern)
- MIT License permits derivatives, so likely not direct copyright infringement
- However, using the same name could be a trademark issue
- Also, per open source community conventions, credit should be given to prior projects
Problematic in the following ways:
- No credit or mention of prior projects
- Brand confusion from using identical name
- References MIT-licensed code while adopting restrictive license
- Betrayal of open source spirit: Enclosing openly shared ideas in a closed license
Your unplugin-typia code patterns, especially the getTsCompilerOption function implementation, are clearly being referenced. While permitted under MIT License, usage without credit is ethically problematic.
| Original (typia/unplugin-typia) | agentica-typescript-sdk | Similarity |
|---|---|---|
unplugin-typia/core/index.ts |
agentica-unplugin.ts |
High |
unplugin-typia/core/typia.ts (getTsCompilerOption) |
agentica-unplugin.ts |
Very High |
unplugin-typia/vite.ts |
bundlers/vite.ts |
High |
unplugin-typia/webpack.ts |
bundlers/webpack.ts |
High |
typia/FileTransformer.ts |
transformer/transformer.ts |
Medium |
// @agentica/core/package.json
{
"peerDependencies": {
"typia": "catalog:typia"
},
"devDependencies": {
"@ryoppippi/unplugin-typia": "catalog:typia" // ← by ryoppippi
}
}This shows that wrtnlabs/agentica is part of the typia ecosystem and also utilizes ryoppippi's unplugin-typia.
Repository: https://github.com/symbolica-ai/agentica-typescript-sdk
Latest commits:
b1f39dc | 2025-12-09 19:42:06 +0000 | Symbolica Bot <bot@symbolica.ai>
v0.3.0
b7de0a5 | 2025-12-09 19:50:20 +0000 | cxdorn <christoph@symbolica.ai>
Initialize repository
Repository: https://github.com/wrtnlabs/agentica
Latest commit (shallow clone):
09edf4d | 2025-11-12 18:35:31 +0900 | Jeongho Nam <samchon.github@gmail.com>
chore: release v0.34.2
Repository: https://github.com/samchon/typia
Latest commit:
0e0f262 | 2025-11-24 22:40:57 +0900 | Jeongho Nam <samchon.github@gmail.com>
set node-version when releasing
Repository: https://github.com/ryoppippi/unplugin-typia
Latest commits:
c7cbc58 | 2025-06-14 22:46:16 +0100 | ryoppippi <1560508+ryoppippi@users.noreply.github.com>
chore: release v2.6.6
a1bbc01 | 2025-06-14 22:44:24 +0100 | ryoppippi <1560508+ryoppippi@users.noreply.github.com>
Merge pull request #500 from ryoppippi/archive
5735678 | 2025-06-14 22:40:46 +0100 | ryoppippi <1560508+ryoppippi@users.noreply.github.com>
feat!: archive @ryoppippi/unplugin-typia
Observations:
- agentica-typescript-sdk was initialized on December 9, 2025 - an extremely new project
- wrtnlabs/agentica has existed since around February (about 10 months prior)
- unplugin-typia was archived on June 14, 2025
This report is based on static analysis of provided source code and does not constitute legal advice.