# @memberjunction/actions-content-autotag
The `@memberjunction/actions-content-autotag` package provides a single MemberJunction action that combines content autotagging with entity vectorization. It automatically tags content from three source types -- local file systems, RSS feeds, and websites -- and then optionally creates vector embeddings for semantic search and AI-powered retrieval.
For background on the MemberJunction Actions design philosophy (thin wrappers, direct service imports, composition over inheritance), see the [parent Actions CLAUDE.md](../CLAUDE.md).
**Server-side only** -- this package depends on Node.js APIs, database access, and server-side MJ infrastructure. Do not import it from Angular or other client-side code.
## Installation
```bash
npm install @memberjunction/actions-content-autotag
```
This package is part of the MemberJunction monorepo. When working inside the monorepo, add the dependency to your package's `package.json` and run `npm install` at the repository root.
## Architecture
The package contains a single action class that inherits from `VectorizeEntityAction` (in `@memberjunction/core-actions`) and adds an autotagging phase before the inherited vectorization logic. During the autotagging phase, three content-source processors from `@memberjunction/content-autotagging` are executed sequentially.
```mermaid
graph TD
subgraph Package["@memberjunction/actions-content-autotag"]
direction TB
IDX["index.ts\n(re-exports action)"]
ACT["AutotagAndVectorize\nContentAction"]
end
subgraph Sources["Autotagging Sources"]
direction LR
FS["AutotagLocalFileSystem"]
RSS["AutotagRSSFeed"]
WEB["AutotagWebsite"]
end
subgraph Deps["Framework Packages"]
direction TB
VEC["VectorizeEntityAction\n@memberjunction/core-actions"]
BASE["BaseAction\n@memberjunction/actions"]
ABASE["@memberjunction/actions-base"]
CTAG["@memberjunction/content-autotagging"]
end
IDX --> ACT
ACT -->|extends| VEC
VEC -->|extends| BASE
BASE --> ABASE
ACT -->|autotagging phase| FS
ACT -->|autotagging phase| RSS
ACT -->|autotagging phase| WEB
FS -.-> CTAG
RSS -.-> CTAG
WEB -.-> CTAG
style Package fill:#2d6a9f,stroke:#1a4971,color:#fff
style Sources fill:#2d8659,stroke:#1a5c3a,color:#fff
style Deps fill:#7c5295,stroke:#563a6b,color:#fff
```
### Inheritance Chain
`AutotagAndVectorizeContentAction` extends `VectorizeEntityAction` rather than `BaseAction` directly. When the `Vectorize` parameter is enabled, the action delegates to `super.InternalRunAction()` to perform entity vectorization via the `EntityVectorSyncer` from `@memberjunction/ai-vector-sync`.
### Registration
The action is registered with the MJ class factory using:
```typescript
@RegisterClass(BaseAction, "__AutotagAndVectorizeContent")
```
This makes it discoverable at runtime by AI agents, workflow engines, and the `ActionEngineServer`.
## Execution Flow
```mermaid
sequenceDiagram
participant Caller as Caller (Agent / Workflow)
participant Engine as ActionEngineServer
participant Action as AutotagAndVectorize
ContentAction
participant FS as AutotagLocalFileSystem
participant RSS as AutotagRSSFeed
participant Web as AutotagWebsite
participant Vec as VectorizeEntityAction
(super)
Caller->>Engine: RunAction({ ActionName, Params, ContextUser })
Engine->>Action: InternalRunAction(params)
alt Autotag = 1
Action->>FS: Autotag(contextUser)
FS-->>Action: complete
Action->>RSS: Autotag(contextUser)
RSS-->>Action: complete
Action->>Web: Autotag(contextUser)
Web-->>Action: complete
end
alt Vectorize = 1
Action->>Vec: super.InternalRunAction(params)
Vec-->>Action: complete
end
Action-->>Engine: { Success, ResultCode }
Engine-->>Caller: ActionResult
```
## API Reference
### AutotagAndVectorizeContentAction
The single exported action class. Extends `VectorizeEntityAction` from `@memberjunction/core-actions`.
#### Action Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| `Autotag` | `number` | Yes | Set to `1` to run the autotagging phase, `0` to skip |
| `Vectorize` | `number` | Yes | Set to `1` to run the vectorization phase, `0` to skip |
| `EntityNames` | `string` | When `Vectorize = 1` | Comma-separated list of entity names to vectorize (passed to parent `VectorizeEntityAction`) |
#### Return Value
Returns an `ActionResultSimple` with:
| Property | Type | Description |
|---|---|---|
| `Success` | `boolean` | `true` if both enabled phases completed without errors |
| `Message` | `string` | Error details if the action failed |
| `ResultCode` | `string` | `"SUCCESS"` or `"FAILED"` |
#### Autotagging Phase
When `Autotag = 1`, three content-source processors execute sequentially:
1. **AutotagLocalFileSystem** -- processes files from configured local directories
2. **AutotagRSSFeed** -- processes articles from configured RSS feed URLs
3. **AutotagWebsite** -- crawls and processes content from configured websites
Each processor reads its configuration from MemberJunction Content Source metadata. See `@memberjunction/content-autotagging` for source configuration details.
#### Vectorization Phase
When `Vectorize = 1`, the action calls `super.InternalRunAction(params)` which delegates to `VectorizeEntityAction`. That action parses the `EntityNames` parameter, looks up associated Entity Documents, and uses `EntityVectorSyncer` from `@memberjunction/ai-vector-sync` to create vector embeddings.
## Usage Examples
### Autotag and Vectorize (Full Pipeline)
```typescript
import { ActionEngineServer } from '@memberjunction/actions';
const engine = ActionEngineServer.Instance;
const result = await engine.RunAction({
ActionName: '__AutotagAndVectorizeContent',
Params: [
{ Name: 'Autotag', Value: 1 },
{ Name: 'Vectorize', Value: 1 },
{ Name: 'EntityNames', Value: 'Documents,Articles,KnowledgeBase' }
],
ContextUser: currentUser
});
if (result.Success) {
console.log('Content autotagging and vectorization completed successfully');
} else {
console.error('Action failed:', result.Message);
}
```
### Autotag Only
```typescript
const result = await engine.RunAction({
ActionName: '__AutotagAndVectorizeContent',
Params: [
{ Name: 'Autotag', Value: 1 },
{ Name: 'Vectorize', Value: 0 }
],
ContextUser: currentUser
});
```
### Vectorize Only
```typescript
const result = await engine.RunAction({
ActionName: '__AutotagAndVectorizeContent',
Params: [
{ Name: 'Autotag', Value: 0 },
{ Name: 'Vectorize', Value: 1 },
{ Name: 'EntityNames', Value: 'Documents' }
],
ContextUser: currentUser
});
```
### Direct Class Instantiation
While action execution through the engine is preferred, the class can also be used directly:
```typescript
import { AutotagAndVectorizeContentAction } from '@memberjunction/actions-content-autotag';
const action = new AutotagAndVectorizeContentAction();
const result = await action.RunAction({
ActionName: '__AutotagAndVectorizeContent',
ContextUser: currentUser,
Params: [
{ Name: 'Autotag', Value: 1 },
{ Name: 'Vectorize', Value: 1 },
{ Name: 'EntityNames', Value: 'Documents,Articles' }
]
});
```
## Error Handling
The action catches all errors during execution and returns them in the result object rather than throwing exceptions:
- **Missing parameters**: Throws an error if either `Autotag` or `Vectorize` params are not provided
- **Processing errors**: Any error during autotagging or vectorization is caught and returned with `Success: false` and `ResultCode: "FAILED"`
- **Partial execution**: If autotagging succeeds but vectorization fails (or vice versa), the error from the failing phase is returned
## Dependencies
### MemberJunction Packages
| Package | Purpose |
|---|---|
| `@memberjunction/actions` | `BaseAction` base class (transitive via `VectorizeEntityAction`) |
| `@memberjunction/actions-base` | `ActionResultSimple`, `RunActionParams`, `ActionParam` type definitions |
| `@memberjunction/core` | Core MJ framework, `UserInfo`, metadata access |
| `@memberjunction/core-actions` | `VectorizeEntityAction` parent class |
| `@memberjunction/core-entities` | Entity type definitions |
| `@memberjunction/content-autotagging` | `AutotagLocalFileSystem`, `AutotagRSSFeed`, `AutotagWebsite` processors |
| `@memberjunction/global` | `RegisterClass` decorator for MJ class factory registration |
### Third-Party Libraries
| Library | Purpose |
|---|---|
| `axios` | HTTP requests (used by content source processors) |
## Related Packages
- **[@memberjunction/core-actions](../CoreActions/README.md)** -- Contains `VectorizeEntityAction` (the parent class) and 100+ other core actions
- **[@memberjunction/actions-base](../Base/README.md)** -- Shared types and metadata engine
- **[@memberjunction/actions](../Engine/README.md)** -- Server-side action execution engine and `BaseAction`
- **[@memberjunction/content-autotagging](../../ContentAutotagging/)** -- Content source processors and autotagging engine
- **[@memberjunction/ai-vector-sync](../../AI/Vectors/Sync/)** -- Vector embedding synchronization used by the vectorization phase
- **[Parent Actions CLAUDE.md](../CLAUDE.md)** -- Design philosophy and development guidelines for all action packages