This repository was archived by the owner on Mar 21, 2026. It is now read-only.

Repository files navigation

KernelMemory.FileWatcher

Automated document ingestion for Semantic Kernel's KernelMemory service

Overview

KernelMemory File Watcher is a service designed to automate the document ingestion process for Semantic Kernel's KernelMemory service. It monitors specified directories for file changes and sends these changes to the KernelMemory service for processing. This enables the automatic creation of embeddings for Retrieval Augmented Generation (RAG) whenever a file is modified. The service is designed to run on the edge or wherever your files reside, and can be deployed as a standalone service or a Docker container.

Main Components

MessageStore

The MessageStore is responsible for storing and managing file events. It implements the IMessageStore interface which defines methods for adding a file event, retrieving the next file event, and checking if there are any file events in the store. The MessageStore uses a ConcurrentDictionary to store file events, ensuring thread-safety.

FileWatcherService

The FileWatcherService is responsible for watching specified directories for file changes. It uses the FileSystemWatcher class to monitor directories and raises events when files are created, deleted, or modified. These events are then added to the MessageStore.

HttpWorker

The HttpWorker is a hosted service that periodically checks the MessageStore for new file events and sends them to the KernelMemory service. It uses an HttpClient to send HTTP requests and includes logic for handling different types of file events (e.g., upserts and deletes).

How It Works

  1. The FileWatcherService starts watching the specified directories for file changes.
  2. When a file change is detected, a file event is created and added to the MessageStore.
  3. The HttpWorker periodically checks the MessageStore for new file events.
  4. When a new file event is found, the HttpWorker sends it to the KernelMemory service for processing.

Configuration

The service's configuration is defined in the appsettings.json file. Here you can specify the directories to watch, the KernelMemory service's endpoint and API key, and other options.

{
"FileWatcher": {
"Directories": [
{
"Path": "/tmp/folder_01",
"Filter": "*.md", // single filter"Index": "folder-01",
"IncludeSubdirectories": true
},
{
"Path": "/tmp/folder_02",
"Filters": { // multiple filters"*.md",
"*.pdf"
},
"Index": "folder-02",
"IncludeSubdirectories": true
},
// More directories...
]
},
"KernelMemory": {
"Endpoint": "http://127.0.0.1:9001",
"ApiKey": "", // not required"Schedule": "00:00:30"
}
}

In the FileWatcher section, you can specify multiple directories to watch. For each directory, you can specify a path, a filter for the types of files to watch, an index, and whether to include subdirectories.

In the KernelMemory section, you can specify the endpoint of the KernelMemory service, your API key, and the schedule for the HttpWorker to check for new file events.

Running the Service

To run the service, you can either run the KernelMemory.FileWatcher project directly or build and run the Docker container.

Running as a Standalone Service

To run the service as a standalone service, you can build and run the KernelMemory.FileWatcher project using the following commands:

dotnet run --project KernelMemory.FileWatcher

Running as a Docker Container

docker run -v /path/to/your/appsettings.json:/config/appsettings.json -v /path/to/your/documents-01:/data/documents-01 mplogas/km-filewatcher:latest

About

A service for automating document ingestion for Semantic Kernel's KernelMemory service

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Mar 21, 2026. It is now read-only.

Repository files navigation

KernelMemory.FileWatcher

Automated document ingestion for Semantic Kernel's KernelMemory service

Overview

KernelMemory File Watcher is a service designed to automate the document ingestion process for Semantic Kernel's KernelMemory service. It monitors specified directories for file changes and sends these changes to the KernelMemory service for processing. This enables the automatic creation of embeddings for Retrieval Augmented Generation (RAG) whenever a file is modified. The service is designed to run on the edge or wherever your files reside, and can be deployed as a standalone service or a Docker container.

Main Components

MessageStore

The MessageStore is responsible for storing and managing file events. It implements the IMessageStore interface which defines methods for adding a file event, retrieving the next file event, and checking if there are any file events in the store. The MessageStore uses a ConcurrentDictionary to store file events, ensuring thread-safety.

FileWatcherService

The FileWatcherService is responsible for watching specified directories for file changes. It uses the FileSystemWatcher class to monitor directories and raises events when files are created, deleted, or modified. These events are then added to the MessageStore.

HttpWorker

The HttpWorker is a hosted service that periodically checks the MessageStore for new file events and sends them to the KernelMemory service. It uses an HttpClient to send HTTP requests and includes logic for handling different types of file events (e.g., upserts and deletes).

How It Works

  1. The FileWatcherService starts watching the specified directories for file changes.
  2. When a file change is detected, a file event is created and added to the MessageStore.
  3. The HttpWorker periodically checks the MessageStore for new file events.
  4. When a new file event is found, the HttpWorker sends it to the KernelMemory service for processing.

Configuration

The service's configuration is defined in the appsettings.json file. Here you can specify the directories to watch, the KernelMemory service's endpoint and API key, and other options.

{
"FileWatcher": {
"Directories": [
{
"Path": "/tmp/folder_01",
"Filter": "*.md", // single filter"Index": "folder-01",
"IncludeSubdirectories": true
},
{
"Path": "/tmp/folder_02",
"Filters": { // multiple filters"*.md",
"*.pdf"
},
"Index": "folder-02",
"IncludeSubdirectories": true
},
// More directories...
]
},
"KernelMemory": {
"Endpoint": "http://127.0.0.1:9001",
"ApiKey": "", // not required"Schedule": "00:00:30"
}
}

In the FileWatcher section, you can specify multiple directories to watch. For each directory, you can specify a path, a filter for the types of files to watch, an index, and whether to include subdirectories.

In the KernelMemory section, you can specify the endpoint of the KernelMemory service, your API key, and the schedule for the HttpWorker to check for new file events.

Running the Service

To run the service, you can either run the KernelMemory.FileWatcher project directly or build and run the Docker container.

Running as a Standalone Service

To run the service as a standalone service, you can build and run the KernelMemory.FileWatcher project using the following commands:

dotnet run --project KernelMemory.FileWatcher

Running as a Docker Container

docker run -v /path/to/your/appsettings.json:/config/appsettings.json -v /path/to/your/documents-01:/data/documents-01 mplogas/km-filewatcher:latest

About

A service for automating document ingestion for Semantic Kernel's KernelMemory service

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 21, 2026. It is now read-only.

Repository files navigation

KernelMemory.FileWatcher

Automated document ingestion for Semantic Kernel's KernelMemory service

Overview

KernelMemory File Watcher is a service designed to automate the document ingestion process for Semantic Kernel's KernelMemory service. It monitors specified directories for file changes and sends these changes to the KernelMemory service for processing. This enables the automatic creation of embeddings for Retrieval Augmented Generation (RAG) whenever a file is modified. The service is designed to run on the edge or wherever your files reside, and can be deployed as a standalone service or a Docker container.

Main Components

MessageStore

The MessageStore is responsible for storing and managing file events. It implements the IMessageStore interface which defines methods for adding a file event, retrieving the next file event, and checking if there are any file events in the store. The MessageStore uses a ConcurrentDictionary to store file events, ensuring thread-safety.

FileWatcherService

The FileWatcherService is responsible for watching specified directories for file changes. It uses the FileSystemWatcher class to monitor directories and raises events when files are created, deleted, or modified. These events are then added to the MessageStore.

HttpWorker

The HttpWorker is a hosted service that periodically checks the MessageStore for new file events and sends them to the KernelMemory service. It uses an HttpClient to send HTTP requests and includes logic for handling different types of file events (e.g., upserts and deletes).

How It Works

  1. The FileWatcherService starts watching the specified directories for file changes.
  2. When a file change is detected, a file event is created and added to the MessageStore.
  3. The HttpWorker periodically checks the MessageStore for new file events.
  4. When a new file event is found, the HttpWorker sends it to the KernelMemory service for processing.

Configuration

The service's configuration is defined in the appsettings.json file. Here you can specify the directories to watch, the KernelMemory service's endpoint and API key, and other options.

{
"FileWatcher": {
"Directories": [
{
"Path": "/tmp/folder_01",
"Filter": "*.md", // single filter"Index": "folder-01",
"IncludeSubdirectories": true
},
{
"Path": "/tmp/folder_02",
"Filters": { // multiple filters"*.md",
"*.pdf"
},
"Index": "folder-02",
"IncludeSubdirectories": true
},
// More directories...
]
},
"KernelMemory": {
"Endpoint": "http://127.0.0.1:9001",
"ApiKey": "", // not required"Schedule": "00:00:30"
}
}

In the FileWatcher section, you can specify multiple directories to watch. For each directory, you can specify a path, a filter for the types of files to watch, an index, and whether to include subdirectories.

In the KernelMemory section, you can specify the endpoint of the KernelMemory service, your API key, and the schedule for the HttpWorker to check for new file events.

Running the Service

To run the service, you can either run the KernelMemory.FileWatcher project directly or build and run the Docker container.

Running as a Standalone Service

To run the service as a standalone service, you can build and run the KernelMemory.FileWatcher project using the following commands:

dotnet run --project KernelMemory.FileWatcher

Running as a Docker Container

docker run -v /path/to/your/appsettings.json:/config/appsettings.json -v /path/to/your/documents-01:/data/documents-01 mplogas/km-filewatcher:latest

About

A service for automating document ingestion for Semantic Kernel's KernelMemory service

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 21, 2026. It is now read-only.

Repository files navigation

KernelMemory.FileWatcher

Automated document ingestion for Semantic Kernel's KernelMemory service

Overview

KernelMemory File Watcher is a service designed to automate the document ingestion process for Semantic Kernel's KernelMemory service. It monitors specified directories for file changes and sends these changes to the KernelMemory service for processing. This enables the automatic creation of embeddings for Retrieval Augmented Generation (RAG) whenever a file is modified. The service is designed to run on the edge or wherever your files reside, and can be deployed as a standalone service or a Docker container.

Main Components

MessageStore

The MessageStore is responsible for storing and managing file events. It implements the IMessageStore interface which defines methods for adding a file event, retrieving the next file event, and checking if there are any file events in the store. The MessageStore uses a ConcurrentDictionary to store file events, ensuring thread-safety.

FileWatcherService

The FileWatcherService is responsible for watching specified directories for file changes. It uses the FileSystemWatcher class to monitor directories and raises events when files are created, deleted, or modified. These events are then added to the MessageStore.

HttpWorker

The HttpWorker is a hosted service that periodically checks the MessageStore for new file events and sends them to the KernelMemory service. It uses an HttpClient to send HTTP requests and includes logic for handling different types of file events (e.g., upserts and deletes).

How It Works

  1. The FileWatcherService starts watching the specified directories for file changes.
  2. When a file change is detected, a file event is created and added to the MessageStore.
  3. The HttpWorker periodically checks the MessageStore for new file events.
  4. When a new file event is found, the HttpWorker sends it to the KernelMemory service for processing.

Configuration

The service's configuration is defined in the appsettings.json file. Here you can specify the directories to watch, the KernelMemory service's endpoint and API key, and other options.

{
"FileWatcher": {
"Directories": [
{
"Path": "/tmp/folder_01",
"Filter": "*.md", // single filter"Index": "folder-01",
"IncludeSubdirectories": true
},
{
"Path": "/tmp/folder_02",
"Filters": { // multiple filters"*.md",
"*.pdf"
},
"Index": "folder-02",
"IncludeSubdirectories": true
},
// More directories...
]
},
"KernelMemory": {
"Endpoint": "http://127.0.0.1:9001",
"ApiKey": "", // not required"Schedule": "00:00:30"
}
}

In the FileWatcher section, you can specify multiple directories to watch. For each directory, you can specify a path, a filter for the types of files to watch, an index, and whether to include subdirectories.

In the KernelMemory section, you can specify the endpoint of the KernelMemory service, your API key, and the schedule for the HttpWorker to check for new file events.

Running the Service

To run the service, you can either run the KernelMemory.FileWatcher project directly or build and run the Docker container.

Running as a Standalone Service

To run the service as a standalone service, you can build and run the KernelMemory.FileWatcher project using the following commands:

dotnet run --project KernelMemory.FileWatcher

Running as a Docker Container

docker run -v /path/to/your/appsettings.json:/config/appsettings.json -v /path/to/your/documents-01:/data/documents-01 mplogas/km-filewatcher:latest

About

A service for automating document ingestion for Semantic Kernel's KernelMemory service

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Mar 21, 2026. It is now read-only.

Repository files navigation

KernelMemory.FileWatcher

Automated document ingestion for Semantic Kernel's KernelMemory service

Overview

KernelMemory File Watcher is a service designed to automate the document ingestion process for Semantic Kernel's KernelMemory service. It monitors specified directories for file changes and sends these changes to the KernelMemory service for processing. This enables the automatic creation of embeddings for Retrieval Augmented Generation (RAG) whenever a file is modified. The service is designed to run on the edge or wherever your files reside, and can be deployed as a standalone service or a Docker container.

Main Components

MessageStore

The MessageStore is responsible for storing and managing file events. It implements the IMessageStore interface which defines methods for adding a file event, retrieving the next file event, and checking if there are any file events in the store. The MessageStore uses a ConcurrentDictionary to store file events, ensuring thread-safety.

FileWatcherService

The FileWatcherService is responsible for watching specified directories for file changes. It uses the FileSystemWatcher class to monitor directories and raises events when files are created, deleted, or modified. These events are then added to the MessageStore.

HttpWorker

The HttpWorker is a hosted service that periodically checks the MessageStore for new file events and sends them to the KernelMemory service. It uses an HttpClient to send HTTP requests and includes logic for handling different types of file events (e.g., upserts and deletes).

How It Works

  1. The FileWatcherService starts watching the specified directories for file changes.
  2. When a file change is detected, a file event is created and added to the MessageStore.
  3. The HttpWorker periodically checks the MessageStore for new file events.
  4. When a new file event is found, the HttpWorker sends it to the KernelMemory service for processing.

Configuration

The service's configuration is defined in the appsettings.json file. Here you can specify the directories to watch, the KernelMemory service's endpoint and API key, and other options.

{
"FileWatcher": {
"Directories": [
{
"Path": "/tmp/folder_01",
"Filter": "*.md", // single filter"Index": "folder-01",
"IncludeSubdirectories": true
},
{
"Path": "/tmp/folder_02",
"Filters": { // multiple filters"*.md",
"*.pdf"
},
"Index": "folder-02",
"IncludeSubdirectories": true
},
// More directories...
]
},
"KernelMemory": {
"Endpoint": "http://127.0.0.1:9001",
"ApiKey": "", // not required"Schedule": "00:00:30"
}
}

In the FileWatcher section, you can specify multiple directories to watch. For each directory, you can specify a path, a filter for the types of files to watch, an index, and whether to include subdirectories.

In the KernelMemory section, you can specify the endpoint of the KernelMemory service, your API key, and the schedule for the HttpWorker to check for new file events.

Running the Service

To run the service, you can either run the KernelMemory.FileWatcher project directly or build and run the Docker container.

Running as a Standalone Service

To run the service as a standalone service, you can build and run the KernelMemory.FileWatcher project using the following commands:

dotnet run --project KernelMemory.FileWatcher

Running as a Docker Container

docker run -v /path/to/your/appsettings.json:/config/appsettings.json -v /path/to/your/documents-01:/data/documents-01 mplogas/km-filewatcher:latest

About

A service for automating document ingestion for Semantic Kernel's KernelMemory service

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 21, 2026. It is now read-only.

Repository files navigation

KernelMemory.FileWatcher

Automated document ingestion for Semantic Kernel's KernelMemory service

Overview

KernelMemory File Watcher is a service designed to automate the document ingestion process for Semantic Kernel's KernelMemory service. It monitors specified directories for file changes and sends these changes to the KernelMemory service for processing. This enables the automatic creation of embeddings for Retrieval Augmented Generation (RAG) whenever a file is modified. The service is designed to run on the edge or wherever your files reside, and can be deployed as a standalone service or a Docker container.

Main Components

MessageStore

The MessageStore is responsible for storing and managing file events. It implements the IMessageStore interface which defines methods for adding a file event, retrieving the next file event, and checking if there are any file events in the store. The MessageStore uses a ConcurrentDictionary to store file events, ensuring thread-safety.

FileWatcherService

The FileWatcherService is responsible for watching specified directories for file changes. It uses the FileSystemWatcher class to monitor directories and raises events when files are created, deleted, or modified. These events are then added to the MessageStore.

HttpWorker

The HttpWorker is a hosted service that periodically checks the MessageStore for new file events and sends them to the KernelMemory service. It uses an HttpClient to send HTTP requests and includes logic for handling different types of file events (e.g., upserts and deletes).

How It Works

  1. The FileWatcherService starts watching the specified directories for file changes.
  2. When a file change is detected, a file event is created and added to the MessageStore.
  3. The HttpWorker periodically checks the MessageStore for new file events.
  4. When a new file event is found, the HttpWorker sends it to the KernelMemory service for processing.

Configuration

The service's configuration is defined in the appsettings.json file. Here you can specify the directories to watch, the KernelMemory service's endpoint and API key, and other options.

{
"FileWatcher": {
"Directories": [
{
"Path": "/tmp/folder_01",
"Filter": "*.md", // single filter"Index": "folder-01",
"IncludeSubdirectories": true
},
{
"Path": "/tmp/folder_02",
"Filters": { // multiple filters"*.md",
"*.pdf"
},
"Index": "folder-02",
"IncludeSubdirectories": true
},
// More directories...
]
},
"KernelMemory": {
"Endpoint": "http://127.0.0.1:9001",
"ApiKey": "", // not required"Schedule": "00:00:30"
}
}

In the FileWatcher section, you can specify multiple directories to watch. For each directory, you can specify a path, a filter for the types of files to watch, an index, and whether to include subdirectories.

In the KernelMemory section, you can specify the endpoint of the KernelMemory service, your API key, and the schedule for the HttpWorker to check for new file events.

Running the Service

To run the service, you can either run the KernelMemory.FileWatcher project directly or build and run the Docker container.

Running as a Standalone Service

To run the service as a standalone service, you can build and run the KernelMemory.FileWatcher project using the following commands:

dotnet run --project KernelMemory.FileWatcher

Running as a Docker Container

docker run -v /path/to/your/appsettings.json:/config/appsettings.json -v /path/to/your/documents-01:/data/documents-01 mplogas/km-filewatcher:latest

About

A service for automating document ingestion for Semantic Kernel's KernelMemory service

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Mar 21, 2026. It is now read-only.

Repository files navigation

KernelMemory.FileWatcher

Automated document ingestion for Semantic Kernel's KernelMemory service

Overview

KernelMemory File Watcher is a service designed to automate the document ingestion process for Semantic Kernel's KernelMemory service. It monitors specified directories for file changes and sends these changes to the KernelMemory service for processing. This enables the automatic creation of embeddings for Retrieval Augmented Generation (RAG) whenever a file is modified. The service is designed to run on the edge or wherever your files reside, and can be deployed as a standalone service or a Docker container.

Main Components

MessageStore

The MessageStore is responsible for storing and managing file events. It implements the IMessageStore interface which defines methods for adding a file event, retrieving the next file event, and checking if there are any file events in the store. The MessageStore uses a ConcurrentDictionary to store file events, ensuring thread-safety.

FileWatcherService

The FileWatcherService is responsible for watching specified directories for file changes. It uses the FileSystemWatcher class to monitor directories and raises events when files are created, deleted, or modified. These events are then added to the MessageStore.

HttpWorker

The HttpWorker is a hosted service that periodically checks the MessageStore for new file events and sends them to the KernelMemory service. It uses an HttpClient to send HTTP requests and includes logic for handling different types of file events (e.g., upserts and deletes).

How It Works

  1. The FileWatcherService starts watching the specified directories for file changes.
  2. When a file change is detected, a file event is created and added to the MessageStore.
  3. The HttpWorker periodically checks the MessageStore for new file events.
  4. When a new file event is found, the HttpWorker sends it to the KernelMemory service for processing.

Configuration

The service's configuration is defined in the appsettings.json file. Here you can specify the directories to watch, the KernelMemory service's endpoint and API key, and other options.

{
"FileWatcher": {
"Directories": [
{
"Path": "/tmp/folder_01",
"Filter": "*.md", // single filter"Index": "folder-01",
"IncludeSubdirectories": true
},
{
"Path": "/tmp/folder_02",
"Filters": { // multiple filters"*.md",
"*.pdf"
},
"Index": "folder-02",
"IncludeSubdirectories": true
},
// More directories...
]
},
"KernelMemory": {
"Endpoint": "http://127.0.0.1:9001",
"ApiKey": "", // not required"Schedule": "00:00:30"
}
}

In the FileWatcher section, you can specify multiple directories to watch. For each directory, you can specify a path, a filter for the types of files to watch, an index, and whether to include subdirectories.

In the KernelMemory section, you can specify the endpoint of the KernelMemory service, your API key, and the schedule for the HttpWorker to check for new file events.

Running the Service

To run the service, you can either run the KernelMemory.FileWatcher project directly or build and run the Docker container.

Running as a Standalone Service

To run the service as a standalone service, you can build and run the KernelMemory.FileWatcher project using the following commands:

dotnet run --project KernelMemory.FileWatcher

Running as a Docker Container

docker run -v /path/to/your/appsettings.json:/config/appsettings.json -v /path/to/your/documents-01:/data/documents-01 mplogas/km-filewatcher:latest

About

A service for automating document ingestion for Semantic Kernel's KernelMemory service

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Mar 21, 2026. It is now read-only.

Repository files navigation

KernelMemory.FileWatcher

Automated document ingestion for Semantic Kernel's KernelMemory service

Overview

KernelMemory File Watcher is a service designed to automate the document ingestion process for Semantic Kernel's KernelMemory service. It monitors specified directories for file changes and sends these changes to the KernelMemory service for processing. This enables the automatic creation of embeddings for Retrieval Augmented Generation (RAG) whenever a file is modified. The service is designed to run on the edge or wherever your files reside, and can be deployed as a standalone service or a Docker container.

Main Components

MessageStore

The MessageStore is responsible for storing and managing file events. It implements the IMessageStore interface which defines methods for adding a file event, retrieving the next file event, and checking if there are any file events in the store. The MessageStore uses a ConcurrentDictionary to store file events, ensuring thread-safety.

FileWatcherService

The FileWatcherService is responsible for watching specified directories for file changes. It uses the FileSystemWatcher class to monitor directories and raises events when files are created, deleted, or modified. These events are then added to the MessageStore.

HttpWorker

The HttpWorker is a hosted service that periodically checks the MessageStore for new file events and sends them to the KernelMemory service. It uses an HttpClient to send HTTP requests and includes logic for handling different types of file events (e.g., upserts and deletes).

How It Works

  1. The FileWatcherService starts watching the specified directories for file changes.
  2. When a file change is detected, a file event is created and added to the MessageStore.
  3. The HttpWorker periodically checks the MessageStore for new file events.
  4. When a new file event is found, the HttpWorker sends it to the KernelMemory service for processing.

Configuration

The service's configuration is defined in the appsettings.json file. Here you can specify the directories to watch, the KernelMemory service's endpoint and API key, and other options.

{
"FileWatcher": {
"Directories": [
{
"Path": "/tmp/folder_01",
"Filter": "*.md", // single filter"Index": "folder-01",
"IncludeSubdirectories": true
},
{
"Path": "/tmp/folder_02",
"Filters": { // multiple filters"*.md",
"*.pdf"
},
"Index": "folder-02",
"IncludeSubdirectories": true
},
// More directories...
]
},
"KernelMemory": {
"Endpoint": "http://127.0.0.1:9001",
"ApiKey": "", // not required"Schedule": "00:00:30"
}
}

In the FileWatcher section, you can specify multiple directories to watch. For each directory, you can specify a path, a filter for the types of files to watch, an index, and whether to include subdirectories.

In the KernelMemory section, you can specify the endpoint of the KernelMemory service, your API key, and the schedule for the HttpWorker to check for new file events.

Running the Service

To run the service, you can either run the KernelMemory.FileWatcher project directly or build and run the Docker container.

Running as a Standalone Service

To run the service as a standalone service, you can build and run the KernelMemory.FileWatcher project using the following commands:

dotnet run --project KernelMemory.FileWatcher

Running as a Docker Container

docker run -v /path/to/your/appsettings.json:/config/appsettings.json -v /path/to/your/documents-01:/data/documents-01 mplogas/km-filewatcher:latest

About

A service for automating document ingestion for Semantic Kernel's KernelMemory service

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages