diff --git a/README.md b/README.md index ddd7831..e23cbbb 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ A [Model Context Protocol](https://modelcontextprotocol.io/) server that exposes - **BM25 full-text search** — fast lexical search across all chapters and notes via [MiniSearch](https://lucaong.github.io/minisearch/) - **Optional semantic search** — set `BINDERY_OLLAMA_URL` for semantic reranking, or enable a full semantic index for precomputed embedding search -- **Version tracking** — `get_review_text` returns a structured git diff **plus** any regions wrapped in ` ... ` markers (so committed work-in-progress can still be reviewed). `git_snapshot` saves progress as a git commit scoped to story/notes/arc folders. Git is auto-initialized during workspace setup if available +- **Version tracking** — `get_review_text` returns a structured git diff **plus** any regions wrapped in ` ... ` markers (so committed work-in-progress can still be reviewed). `git_snapshot` saves progress as a git commit. Git is auto-initialized during workspace setup if available - **Translation & dialect management** — glossary entries and dialect substitution rules in `.bindery/translations.json`, queryable and updatable by agents - **Session memory** — persistent `.bindery/memories/` files for cross-session decisions, with append, list, and compact operations - **Chapter status tracking** — per-chapter progress tracker (`draft`, `in-progress`, `done`, `needs-review`) diff --git a/bindery-core/src/templates/bindery-readme.ts b/bindery-core/src/templates/bindery-readme.ts index 42f858e..45693a4 100644 --- a/bindery-core/src/templates/bindery-readme.ts +++ b/bindery-core/src/templates/bindery-readme.ts @@ -2,7 +2,7 @@ import type { TemplateContext, TemplateMeta } from './context'; export const meta: TemplateMeta = { file: '.bindery/README.md', - version: 5, + version: 6, label: 'bindery capabilities', zip: null, }; @@ -77,7 +77,7 @@ tagged **(writes)** modify files or git state. | \`index_build\` / \`index_status\` (writes / reads) | Build or inspect the lexical/semantic index. | | \`format\` (writes) | Apply typography to a file or folder (\`dryRun\` supported). | | \`get_review_text\` (writes) | Returns the **git diff of uncommitted changes** *plus* any regions wrapped in \` ... \` markers. Marker regions surface even after a commit, so committed work-in-progress can still be reviewed. \`autoStage: true\` stages files **and** consumes (removes) the marker lines. | -| \`git_snapshot\` (writes) | Commit changes in story / notes / arc folders, optional push. | +| \`git_snapshot\` (writes) | Commit changes in bindery workspace, optional push. | | \`get_translation\` / \`add_translation\` (reads / writes) | Glossary lookup and upsert per target language. | | \`get_dialect\` / \`add_dialect\` (reads / writes) | Dialect substitution lookup and upsert (e.g. \`en-gb\`). | | \`add_language\` (writes) | Scaffold a new language under the story folder. | diff --git a/bindery-core/src/templates/claude.ts b/bindery-core/src/templates/claude.ts index 1bb5c4b..92b6cb6 100644 --- a/bindery-core/src/templates/claude.ts +++ b/bindery-core/src/templates/claude.ts @@ -2,7 +2,7 @@ import { audienceNote, languageSection, type TemplateContext, type TemplateMeta export const meta: TemplateMeta = { file: 'CLAUDE.md', - version: 11, + version: 12, label: 'project instructions', zip: null, }; @@ -86,7 +86,7 @@ export function render(ctx: TemplateContext): string { '| `format` | Apply typography formatting to a file or folder |', '| `get_review_text` | Structured git diff with review-marker regions and optional auto-staging that consumes markers |', '| `update_workspace` | Fetch and pull the current branch, with branch/default-branch reporting |', - '| `git_snapshot` | Git commit of story, notes, and arc changes, with optional push |', + '| `git_snapshot` | Commit changes in bindery workspace, with optional push |', '| `get_translation` | List glossary entries for a language, or look up a specific term (forgiving) |', '| `add_translation` | Add or update a cross-language glossary entry (agent reference, not auto-applied) |', '| `get_dialect` | List dialect substitution rules, or look up a specific word |', diff --git a/bindery-core/tsconfig.json b/bindery-core/tsconfig.json index fd51b22..94538ab 100644 --- a/bindery-core/tsconfig.json +++ b/bindery-core/tsconfig.json @@ -12,7 +12,8 @@ "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "types": ["node"], - "declaration": true + "declaration": true, + "composite": true }, "include": ["src/**/*.ts"], "exclude": ["node_modules"] diff --git a/bindery-merge/tsconfig.json b/bindery-merge/tsconfig.json index fd51b22..94538ab 100644 --- a/bindery-merge/tsconfig.json +++ b/bindery-merge/tsconfig.json @@ -12,7 +12,8 @@ "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "types": ["node"], - "declaration": true + "declaration": true, + "composite": true }, "include": ["src/**/*.ts"], "exclude": ["node_modules"] diff --git a/mcp-ts/src/index.ts b/mcp-ts/src/index.ts index 5fbff5f..9276b83 100644 --- a/mcp-ts/src/index.ts +++ b/mcp-ts/src/index.ts @@ -270,7 +270,7 @@ server.registerTool('update_workspace', { server.registerTool('git_snapshot', { title: 'Git Snapshot', description: - 'Save a snapshot (git commit) of all changes in story, notes, and arc folders. ' + + 'Save a snapshot (git commit) of all changes in the bindery workspace. ' + 'Provides an optional commit message, can optionally push to a remote branch, and can remember push defaults in settings.json. ' + 'Use this to create save points after writing sessions or successful reviews.', inputSchema: { diff --git a/mcp-ts/src/tools.ts b/mcp-ts/src/tools.ts index d8c0752..817bc03 100644 --- a/mcp-ts/src/tools.ts +++ b/mcp-ts/src/tools.ts @@ -1157,12 +1157,6 @@ function consumeReviewMarkers(root: string, relFiles: string[]): void { } } -/** Content folders that git operations should scope to. */ -function contentFolders(root: string): string[] { - const story = storyFolder(root); - return [story, 'Notes', 'Arc'].filter(d => fs.existsSync(path.join(root, d))); -} - // ─── update_workspace ──────────────────────────────────────────────────────── export interface UpdateWorkspaceArgs { @@ -1233,13 +1227,11 @@ export interface GitSnapshotArgs { } export function toolGitSnapshot(root: string, args: GitSnapshotArgs): string { - const dirs = contentFolders(root); - if (dirs.length === 0) { return 'No content folders found to snapshot.'; } - - // Stage content folders + // Stage everything tracked or untracked in the repo try { - const result = spawnSync('git', ['add', ...dirs], { cwd: root, encoding: 'utf-8' }); + const result = spawnSync('git', ['add', '.'], { cwd: root, encoding: 'utf-8' }); if (result.error) { throw result.error; } + if (result.status !== 0) { throw new Error(result.stderr || 'git add failed'); } } catch { return 'Failed to stage files. Is this a git repository?'; } @@ -1254,7 +1246,7 @@ export function toolGitSnapshot(root: string, args: GitSnapshotArgs): string { return 'Failed to check staged files.'; } - if (!staged.trim()) { return 'Nothing to snapshot — no changes in content folders.'; } + if (!staged.trim()) { return 'Nothing to snapshot — no changes to commit.'; } const fileCount = staged.trim().split('\n').length; const msg = args.message ?? `Snapshot ${new Date().toISOString().slice(0, 16).replaceAll('T', ' ')}`; diff --git a/mcp-ts/test/git-tools.test.ts b/mcp-ts/test/git-tools.test.ts index 3b9432b..b1d6e87 100644 --- a/mcp-ts/test/git-tools.test.ts +++ b/mcp-ts/test/git-tools.test.ts @@ -165,21 +165,15 @@ describe('toolGetReviewText', () => { // ─── toolGitSnapshot ────────────────────────────────────────────────────────── describe('toolGitSnapshot', () => { - it('returns "Nothing to snapshot" for a non-git dir with Story folder', () => { + it('returns "Nothing to snapshot" for a non-git dir', () => { const root = makeRoot(); fs.mkdirSync(path.join(root, 'Story'), { recursive: true }); const result = toolGitSnapshot(root, {}); - expect(result).toBe('Nothing to snapshot — no changes in content folders.'); + expect(result).toBe('Failed to stage files. Is this a git repository?'); }); - it('returns "No content folders found" when no Story/Notes/Arc exist', () => { - const root = makeRoot(); - const result = toolGitSnapshot(root, {}); - expect(result).toBe('No content folders found to snapshot.'); - }); - - it('returns "Nothing to snapshot" when content is committed and has no changes', () => { + it('returns "Nothing to snapshot" when everything is already committed', () => { const root = makeGitRepo(); write(path.join(root, 'Story', 'EN', 'Chapter 1.md'), '# Ch1\nContent.\n'); @@ -187,7 +181,7 @@ describe('toolGitSnapshot', () => { spawnSync('git', ['commit', '-m', 'Add chapter'], { cwd: root }); const result = toolGitSnapshot(root, {}); - expect(result).toBe('Nothing to snapshot — no changes in content folders.'); + expect(result).toBe('Nothing to snapshot — no changes to commit.'); }); it('commits a new content file and returns snapshot message', () => { @@ -283,6 +277,31 @@ describe('toolGitSnapshot', () => { expect(result).toContain('Could not save snapshot push defaults: .bindery/settings.json was not found.'); }); + + it('commits .bindery files (memories, translations) along with story content', () => { + const root = makeGitRepo(); + write(path.join(root, 'Story', 'EN', 'Chapter 1.md'), '# Ch1\nContent.\n'); + write(path.join(root, '.bindery', 'memories', 'global.md'), '## Session\nSome notes.\n'); + + const result = toolGitSnapshot(root, {}); + + expect(result).toContain('Snapshot saved:'); + expect(result).toContain('2 files'); + }); + + it('snapshots .bindery changes even without story folder changes', () => { + const root = makeGitRepo(); + write(path.join(root, 'Story', 'EN', 'Chapter 1.md'), '# Ch1\nContent.\n'); + spawnSync('git', ['add', '.'], { cwd: root }); + spawnSync('git', ['commit', '-m', 'Initial'], { cwd: root }); + + // Only memory changed + write(path.join(root, '.bindery', 'memories', 'global.md'), '## Session\nNew note.\n'); + + const result = toolGitSnapshot(root, {}); + expect(result).toContain('Snapshot saved:'); + expect(result).toContain('1 file'); + }); }); describe('toolUpdateWorkspace', () => { diff --git a/mcpb/README.md b/mcpb/README.md index 9415da6..3f482bf 100644 --- a/mcpb/README.md +++ b/mcpb/README.md @@ -146,7 +146,7 @@ table with issue type, location, and the reference that contradicts it. | `format` | Apply typography formatting to a file or folder | | `get_review_text` | Git diff of uncommitted changes plus any `` marker regions; optional auto-staging consumes the markers | | `update_workspace` | Fetch and pull the current branch, with branch/default-branch reporting | -| `git_snapshot` | Git commit of story, notes, and arc changes, with optional push | +| `git_snapshot` | Commit changes in bindery workspace, with optional push | | `get_translation` | List glossary entries for a language, or look up a specific term (forgiving) | | `add_translation` | Add or update a cross-language glossary entry (agent reference) | | `get_dialect` | List dialect substitution rules, or look up a specific word | diff --git a/mcpb/manifest.json b/mcpb/manifest.json index 3654ddc..f83060f 100644 --- a/mcpb/manifest.json +++ b/mcpb/manifest.json @@ -74,7 +74,7 @@ { "name": "format", "description": "Apply typography formatting (curly quotes, em-dashes, ellipses) to a file or folder." }, { "name": "get_review_text", "description": "Structured review payload: git diff of uncommitted changes plus any regions wrapped in markers (works even on committed work). Filter by language (EN, NL, ALL). autoStage stages reviewed files and consumes review markers." }, { "name": "update_workspace", "description": "Fetch and pull the current git branch, report the current branch versus the remote default branch, and optionally switch branches before pulling." }, - { "name": "git_snapshot", "description": "Save a snapshot (git commit) of all changes in story, notes, and arc folders. Can also push and remember push defaults." }, + { "name": "git_snapshot", "description": "Save a snapshot (git commit) of all changes in the bindery workspace." }, { "name": "add_translation", "description": "Add or update a cross-language glossary entry in .bindery/translations.json for agent reference (source → target term). For dialect substitution rules use add_dialect." }, { "name": "get_translation", "description": "Look up cross-language glossary entries from .bindery/translations.json. List all entries for a language or do a forgiving word lookup. For dialect substitution rules use get_dialect." }, { "name": "add_dialect", "description": "Add or update a dialect substitution rule in .bindery/translations.json (e.g. US→UK spelling: color→colour). Applied automatically during export." }, diff --git a/obsidian-plugin/src/main.ts b/obsidian-plugin/src/main.ts index 1d94e89..0ea76a2 100644 --- a/obsidian-plugin/src/main.ts +++ b/obsidian-plugin/src/main.ts @@ -9,11 +9,10 @@ * inside the Obsidian app itself. */ -import { BINDERY_FOLDER, SETTINGS_FILENAME, upsertGlossaryRule, getDefaultLanguage, type LanguageConfig } from '@bindery/core'; -import type { OutputType } from '@bindery/merge'; -import { mergeBook } from './merge'; +import { BINDERY_FOLDER, SETTINGS_FILENAME, upsertGlossaryRule, getDefaultLanguage, applyTypography, readWorkspaceSettings, type LanguageConfig } from '@bindery/core'; +import { mergeBook, type OutputType } from './merge'; import { formatFile } from './formatter'; -import { exportBook, resolveBookRoot } from './exporter'; +import { resolveBookRoot } from './exporter'; import { setupAiFiles, ALL_SKILLS } from './ai-setup'; import { readSettings, addDialectRule, addLanguage, findProbableUsWords } from './workspace'; import { BinderySettingsTab, DEFAULT_SETTINGS, type BinderySettings } from './settings-tab'; @@ -175,6 +174,13 @@ export default class BinderyPlugin extends Plugin { callback: () => void this.formatActive(), }); + // Command: format all markdown files in a folder + this.addCommand({ + id: 'format-folder', + name: 'Format folder (all .md files)', + callback: () => void this.formatFolder(), + }); + // Review marker commands this.addCommand({ id: 'start-review-marker', @@ -187,17 +193,7 @@ export default class BinderyPlugin extends Plugin { editorCallback: (editor) => this.insertStopReviewMarker(editor), }); - // Export commands - for (const fmt of ['md', 'docx', 'epub', 'pdf'] as const) { - const label = fmt.toUpperCase(); - this.addCommand({ - id: `export-${fmt}`, - name: `Export → ${label}`, - callback: () => void exportBook(this.app, this.settings, fmt), - }); - } - - // Merge commands (NEW: discover chapters and merge them) + // Merge commands for (const fmt of ['md', 'docx', 'epub', 'pdf', 'all'] as const) { const outputTypes = fmt === 'all' ? ['md', 'docx', 'epub', 'pdf'] : [fmt]; const label = fmt === 'all' ? 'All Formats' : fmt.toUpperCase(); @@ -302,6 +298,46 @@ export default class BinderyPlugin extends Plugin { } } + private async formatFolder(): Promise { + let vaultPath: string; + let bookRoot: string; + try { + vaultPath = this.getVaultBasePath(); + bookRoot = resolveBookRoot(vaultPath, this.settings.bookRoot); + } catch (err) { + const message = err instanceof Error ? err.message : String(err); + this.notify(`Format folder failed: ${message}`); + return; + } + const wsSettings = readWorkspaceSettings(bookRoot); + const storyFolder = wsSettings?.storyFolder ?? 'Story'; + const targetDir = path.join(bookRoot, storyFolder); + if (!fs.existsSync(targetDir)) { + this.notify(`Story folder not found: ${storyFolder}`); + return; + } + const count = this.formatDirectoryRecursive(targetDir); + this.notify(`Typography: ${count} file(s) updated.`); + } + + private formatDirectoryRecursive(dirPath: string): number { + let count = 0; + for (const entry of fs.readdirSync(dirPath, { withFileTypes: true })) { + const fullPath = path.join(dirPath, entry.name); + if (entry.isDirectory()) { + count += this.formatDirectoryRecursive(fullPath); + } else if (entry.isFile() && entry.name.endsWith('.md')) { + const content = fs.readFileSync(fullPath, 'utf-8'); + const formatted = applyTypography(content); + if (content !== formatted) { + fs.writeFileSync(fullPath, formatted, 'utf-8'); + count++; + } + } + } + return count; + } + private async formatActive(): Promise { const file = this.app.workspace?.getActiveFile?.(); if (file?.extension !== 'md') { diff --git a/obsidian-plugin/src/merge.ts b/obsidian-plugin/src/merge.ts index 4e3062f..c501c87 100644 --- a/obsidian-plugin/src/merge.ts +++ b/obsidian-plugin/src/merge.ts @@ -12,6 +12,8 @@ import { type MergeResult, type OutputType, } from '@bindery/merge'; + +export type { OutputType }; import { readWorkspaceSettings, getDefaultLanguage, diff --git a/obsidian-plugin/tsconfig.json b/obsidian-plugin/tsconfig.json index e6db9fa..0acf715 100644 --- a/obsidian-plugin/tsconfig.json +++ b/obsidian-plugin/tsconfig.json @@ -3,9 +3,9 @@ "module": "commonjs", "target": "ES2022", "outDir": "out", + "rootDir": "src", "lib": ["ES2022", "DOM"], "sourceMap": true, - "rootDir": "src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, @@ -14,5 +14,9 @@ "types": ["node"] }, "include": ["src/**/*.ts"], - "exclude": ["node_modules"] + "exclude": ["node_modules"], + "references": [ + { "path": "../bindery-core" }, + { "path": "../bindery-merge" } + ] } diff --git a/package-lock.json b/package-lock.json index 2e20d98..5a02688 100644 --- a/package-lock.json +++ b/package-lock.json @@ -117,17 +117,6 @@ } } }, - "mcp-ts/node_modules/accepts": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "mcp-ts/node_modules/ajv": { "version": "8.18.0", "license": "MIT", @@ -157,67 +146,6 @@ } } }, - "mcp-ts/node_modules/body-parser": { - "version": "2.2.2", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "mcp-ts/node_modules/bytes": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "mcp-ts/node_modules/content-disposition": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "mcp-ts/node_modules/content-type": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "mcp-ts/node_modules/cookie": { - "version": "0.7.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "mcp-ts/node_modules/cookie-signature": { - "version": "1.2.2", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, "mcp-ts/node_modules/cors": { "version": "2.8.6", "license": "MIT", @@ -233,35 +161,6 @@ "url": "https://opencollective.com/express" } }, - "mcp-ts/node_modules/depd": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "mcp-ts/node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" - }, - "mcp-ts/node_modules/encodeurl": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "mcp-ts/node_modules/escape-html": { - "version": "1.0.3", - "license": "MIT" - }, - "mcp-ts/node_modules/etag": { - "version": "1.8.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "mcp-ts/node_modules/eventsource": { "version": "3.0.7", "license": "MIT", @@ -279,161 +178,10 @@ "node": ">=18.0.0" } }, - "mcp-ts/node_modules/express": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "mcp-ts/node_modules/express-rate-limit": { - "version": "8.3.2", - "license": "MIT", - "dependencies": { - "ip-address": "10.1.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": ">= 4.11" - } - }, "mcp-ts/node_modules/fflate": { "version": "0.8.2", "license": "MIT" }, - "mcp-ts/node_modules/finalhandler": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "mcp-ts/node_modules/forwarded": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "mcp-ts/node_modules/fresh": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "mcp-ts/node_modules/hono": { - "version": "4.12.14", - "license": "MIT", - "engines": { - "node": ">=16.9.0" - } - }, - "mcp-ts/node_modules/http-errors": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "mcp-ts/node_modules/iconv-lite": { - "version": "0.7.2", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "mcp-ts/node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "mcp-ts/node_modules/ip-address": { - "version": "10.1.0", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "mcp-ts/node_modules/ipaddr.js": { - "version": "1.9.1", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "mcp-ts/node_modules/is-promise": { - "version": "4.0.0", - "license": "MIT" - }, "mcp-ts/node_modules/jose": { "version": "6.2.2", "license": "MIT", @@ -449,87 +197,10 @@ "version": "8.0.2", "license": "BSD-2-Clause" }, - "mcp-ts/node_modules/media-typer": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "mcp-ts/node_modules/merge-descriptors": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "mcp-ts/node_modules/mime-db": { - "version": "1.54.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "mcp-ts/node_modules/mime-types": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "mcp-ts/node_modules/minisearch": { "version": "7.2.0", "license": "MIT" }, - "mcp-ts/node_modules/negotiator": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "mcp-ts/node_modules/on-finished": { - "version": "2.4.1", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "mcp-ts/node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "mcp-ts/node_modules/parseurl": { - "version": "1.3.3", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "mcp-ts/node_modules/path-to-regexp": { - "version": "8.4.1", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "mcp-ts/node_modules/pkce-challenge": { "version": "5.0.1", "license": "MIT", @@ -537,157 +208,6 @@ "node": ">=16.20.0" } }, - "mcp-ts/node_modules/proxy-addr": { - "version": "2.0.7", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "mcp-ts/node_modules/qs": { - "version": "6.15.0", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "mcp-ts/node_modules/range-parser": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "mcp-ts/node_modules/raw-body": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "mcp-ts/node_modules/router": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "mcp-ts/node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "mcp-ts/node_modules/send": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "mcp-ts/node_modules/serve-static": { - "version": "2.2.1", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "mcp-ts/node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "mcp-ts/node_modules/statuses": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "mcp-ts/node_modules/toidentifier": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "mcp-ts/node_modules/type-is": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "mcp-ts/node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "mcp-ts/node_modules/vary": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "mcp-ts/node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, "mcp-ts/node_modules/zod": { "version": "4.3.6", "license": "MIT", @@ -2428,6 +1948,19 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", @@ -2721,6 +2254,30 @@ "resolved": "obsidian-plugin", "link": true }, + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/brace-expansion": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", @@ -2734,6 +2291,15 @@ "node": "18 || 20 || >=22" } }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/call-bind": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", @@ -2846,6 +2412,28 @@ "dev": true, "license": "MIT" }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -2853,6 +2441,24 @@ "dev": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, "node_modules/crelt": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", @@ -2989,6 +2595,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -3026,6 +2641,12 @@ "node": ">= 0.4" } }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, "node_modules/empathic": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", @@ -3036,6 +2657,15 @@ "node": ">=14" } }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/enhanced-resolve": { "version": "5.21.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", @@ -3273,6 +2903,12 @@ "@esbuild/win32-x64": "0.28.0" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -4036,6 +3672,15 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/expect-type": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", @@ -4046,6 +3691,67 @@ "node": ">=12.0.0" } }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.1.tgz", + "integrity": "sha512-5O6KYmyJEpuPJV5hNTXKbAHWRqrzyu+OI3vUnSd2kXFubIVpG7ezpgxQy76Zo5GQZtrQBg86hF+CM/NX+cioiQ==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4113,6 +3819,27 @@ "node": ">=16.0.0" } }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -4167,6 +3894,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -4454,6 +4199,15 @@ "node": ">= 0.4" } }, + "node_modules/hono": { + "version": "4.12.18", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.18.tgz", + "integrity": "sha512-RWzP96k/yv0PQfyXnWjs6zot20TqfpfsNXhOnev8d1InAxubW93L11/oNUc3tQqn2G0bSdAOBpX+2uDFHV7kdQ==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -4461,6 +4215,42 @@ "dev": true, "license": "MIT" }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/ignore": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", @@ -4498,6 +4288,12 @@ "node": ">=0.8.19" } }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -4513,6 +4309,24 @@ "node": ">= 0.4" } }, + "node_modules/ip-address": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -4750,6 +4564,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -5481,6 +5301,52 @@ "node": ">= 0.4" } }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/minimatch": { "version": "10.2.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", @@ -5556,6 +5422,15 @@ "dev": true, "license": "MIT" }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/node-exports-info": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", @@ -5732,6 +5607,27 @@ ], "license": "MIT" }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -5813,6 +5709,15 @@ "node": ">=6" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5839,6 +5744,16 @@ "dev": true, "license": "MIT" }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -5927,6 +5842,19 @@ "react-is": "^16.13.1" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -5937,6 +5865,45 @@ "node": ">=6" } }, + "node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -6095,6 +6062,22 @@ "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/safe-array-concat": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", @@ -6181,6 +6164,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, "node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -6194,6 +6183,51 @@ "node": ">=10" } }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -6243,6 +6277,12 @@ "node": ">= 0.4" } }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6360,6 +6400,15 @@ "dev": true, "license": "MIT" }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/std-env": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", @@ -6611,6 +6660,15 @@ "node": ">=14.0.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/toml-eslint-parser": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/toml-eslint-parser/-/toml-eslint-parser-0.9.3.tgz", @@ -6686,6 +6744,20 @@ "node": ">= 0.8.0" } }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -6828,6 +6900,15 @@ "dev": true, "license": "MIT" }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -6838,6 +6919,15 @@ "punycode": "^2.1.0" } }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/vite": { "version": "8.0.10", "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.10.tgz", @@ -7145,6 +7235,12 @@ "node": ">=0.10.0" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, "node_modules/yaml": { "version": "2.8.4", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", diff --git a/vscode-ext/README.md b/vscode-ext/README.md index 4834f20..d0ca97f 100644 --- a/vscode-ext/README.md +++ b/vscode-ext/README.md @@ -79,7 +79,7 @@ Bindery includes a bundled MCP server that makes your book's chapters, notes, se | `bindery_format` | Apply typography formatting to a file or folder | | `bindery_get_review_text` | Git diff of uncommitted changes **plus** any `` regions (works on committed work too) | | `bindery_update_workspace` | Fetch and pull the current branch, with branch/default-branch reporting | -| `bindery_git_snapshot` | Save a snapshot (git commit) of story/notes/arc changes, with optional push | +| `bindery_git_snapshot` | Commit changes in bindery workspace, with optional push | | `bindery_get_translation` | Look up cross-language glossary entries | | `bindery_add_translation` | Add or update a glossary entry | | `bindery_get_dialect` | Look up dialect substitution rules | diff --git a/vscode-ext/package.json b/vscode-ext/package.json index 6a2494a..a13a1dc 100644 --- a/vscode-ext/package.json +++ b/vscode-ext/package.json @@ -559,7 +559,7 @@ "displayName": "Bindery: Git Snapshot", "toolReferenceName": "binderyGitSnapshot", "canBeReferencedInPrompt": true, - "modelDescription": "Save a snapshot (git commit) of all changes in story, notes, and arc folders, with optional push and saved push defaults.", + "modelDescription": "Save a snapshot (git commit) of all changes in the bindery workspace, with optional push and saved push defaults.", "inputSchema": { "type": "object", "properties": {