diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index d358fd51..befffbb4 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -73,4 +73,4 @@ Maintainers are not obligated to: This project is licensed under [AGPL-3.0](LICENSE). Commercial use violating the licence will be subject to legal action. -Enforcement of this code of conduct is at the maintainers' sole discretion; final interpretation rests with [@TrueNine](https://github.com/TrueNine). +Enforcement of this code of conduct is at the maintainers' sole discretion; final interpretation rests with [@TrueNine](https://github.com/TrueNine). \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 296c4779..b3fbe2cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2071,7 +2071,7 @@ dependencies = [ [[package]] name = "memory-sync-gui" -version = "2026.10224.10619" +version = "2026.10302.10037" dependencies = [ "dirs", "proptest", diff --git a/README.md b/README.md index 3b88b1b1..a26ac7c0 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Rats 🐀 are like this: even our own brains, even our memories, are things we haul around while running through this fucked-up world!!! -I am a rat. No resources will ever be proactively provided to me.\ +I am a rat. No resources will ever be proactively provided to me. So as a rat, I eat whatever I can reach: maggots in the sewer, leftovers in the slop bucket, and in extreme cases even my own kind—this is the survival mode in a world where resource allocation is brutally unfair. `memory-sync` is the same kind of **tool-rat**: @@ -11,7 +11,7 @@ So as a rat, I eat whatever I can reach: maggots in the sewer, leftovers in the - Does not rely on privileged interfaces of any single IDE / CLI - Treats every readable config, prompt, and memory file as "edible matter" to be carried, dismantled, and recombined -In this ecosystem, giants monopolise the resources, and developers are thrown into the corner like rats.\ +In this ecosystem, giants monopolise the resources, and developers are thrown into the corner like rats. `memory-sync` accepts this cruel reality, does not fantasise about fairness, and focuses on one thing only: **to chew up every fragment of resource you already have, and convert it into portable "memory" that can flow between any AI tool.** ![rat](/.attachments/rat.svg) @@ -76,38 +76,38 @@ To use `memory-sync` you need: --- -- You are writing code in a forgotten sewer.\ +- You are writing code in a forgotten sewer. No one will proactively feed you, not even a tiny free quota, not even a half-decent document. -- As a rat, you can barely get your hands on anything good:\ +- As a rat, you can barely get your hands on anything good: scurrying between free tiers, trial credits, education discounts, and random third-party scripts. -- What can you do?\ +- What can you do? Keep darting between IDEs, CLIs, browser extensions, and cloud Agents, copying and pasting the same memory a hundred times. -- You leech API offers from vendors day after day:\ +- You leech API offers from vendors day after day: today one platform runs a discount so you top up a little; tomorrow another launches a promo so you rush to scrape it. -- Once they have harvested the telemetry, user profiles, and usage patterns they want,\ +- Once they have harvested the telemetry, user profiles, and usage patterns they want, they can kick you—this stinking rat—away at any moment: price hikes, rate limits, account bans, and you have no channel to complain. -If you are barely surviving in this environment, `memory-sync` is built for you:\ +If you are barely surviving in this environment, `memory-sync` is built for you: carry fewer bricks, copy prompts fewer times—at least on the "memory" front, you are no longer completely on the passive receiving end. ## Who is NOT welcome -- Your income is already fucking high.\ +- Your income is already fucking high. Stable salary, project revenue share, budget to sign official APIs yearly. -- And yet you still come down here,\ +- And yet you still come down here, competing with us filthy sewer rats for the scraps in the slop bucket. -- If you can afford APIs and enterprise plans, go pay for them.\ +- If you can afford APIs and enterprise plans, go pay for them. Do things that actually create value—pay properly, give proper feedback, nudge the ecosystem slightly in the right direction. -- Instead of coming back down\ +- Instead of coming back down to strip away the tiny gap left for marginalised developers, squeezing out the last crumbs with us rats. -- You are a freeloader.\ +- You are a freeloader. Everything must be pre-chewed and spoon-fed; you won't even touch a terminal. -- You love the grind culture.\ +- You love the grind culture. Treating "hustle" as virtue, "996" as glory, stepping on peers as a promotion strategy. -- You leave no room for others.\ +- You leave no room for others. Not about whether you share—it's about actively stomping on people, competing maliciously, sustaining your position by suppressing peers, using others' survival space as your stepping stone. -In other words:\ +In other words: **this is not a tool for optimising capital costs, but a small counterattack prepared for the "rats with no choice" in a world of extreme resource inequality.** ## Created by diff --git a/SECURITY.md b/SECURITY.md index 99befb66..86fff327 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -5,9 +5,9 @@ Only the latest release receives security fixes. No backport patches for older versions. | Version | Supported | -|---------|-----------| -| Latest | ✅ | -| Older | ❌ | +| ------- | --------- | +| Latest | ✅ | +| Older | ❌ | ## Reporting a Vulnerability @@ -58,4 +58,4 @@ The following are **out of scope**: ## License -This project is licensed under [AGPL-3.0](LICENSE). Unauthorised commercial use in violation of the licence will be pursued legally. +This project is licensed under [AGPL-3.0](LICENSE). Unauthorised commercial use in violation of the licence will be pursued legally. \ No newline at end of file diff --git a/cli/eslint.config.ts b/cli/eslint.config.ts index f4cfccb6..8418913e 100644 --- a/cli/eslint.config.ts +++ b/cli/eslint.config.ts @@ -11,7 +11,7 @@ const config = eslint10({ strictTypescriptEslint: true, tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), parserOptions: { - allowDefaultProject: true + allowDefaultProject: ['*.config.ts'] } }, ignores: [ diff --git a/cli/npm/darwin-arm64/package.json b/cli/npm/darwin-arm64/package.json index 4742c04c..ddf9caad 100644 --- a/cli/npm/darwin-arm64/package.json +++ b/cli/npm/darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@truenine/memory-sync-cli-darwin-arm64", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "os": [ "darwin" ], diff --git a/cli/npm/darwin-x64/package.json b/cli/npm/darwin-x64/package.json index fe2edac7..0308e7fc 100644 --- a/cli/npm/darwin-x64/package.json +++ b/cli/npm/darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@truenine/memory-sync-cli-darwin-x64", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "os": [ "darwin" ], diff --git a/cli/npm/linux-arm64-gnu/package.json b/cli/npm/linux-arm64-gnu/package.json index 5c10a30f..9b7bb142 100644 --- a/cli/npm/linux-arm64-gnu/package.json +++ b/cli/npm/linux-arm64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@truenine/memory-sync-cli-linux-arm64-gnu", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "os": [ "linux" ], diff --git a/cli/npm/linux-x64-gnu/package.json b/cli/npm/linux-x64-gnu/package.json index 208e4cf1..3b7a52b9 100644 --- a/cli/npm/linux-x64-gnu/package.json +++ b/cli/npm/linux-x64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@truenine/memory-sync-cli-linux-x64-gnu", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "os": [ "linux" ], diff --git a/cli/npm/win32-x64-msvc/package.json b/cli/npm/win32-x64-msvc/package.json index 436f6ec9..f296a87c 100644 --- a/cli/npm/win32-x64-msvc/package.json +++ b/cli/npm/win32-x64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@truenine/memory-sync-cli-win32-x64-msvc", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "os": [ "win32" ], diff --git a/cli/package.json b/cli/package.json index cb9384a6..81e90ded 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,7 +1,7 @@ { "name": "@truenine/memory-sync-cli", "type": "module", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "description": "TrueNine Memory Synchronization CLI", "author": "TrueNine", "license": "AGPL-3.0-only", @@ -39,11 +39,12 @@ "registry": "https://registry.npmjs.org/" }, "scripts": { - "build": "run-s build:deps check bundle", + "build": "run-s build:deps check bundle generate:schema", "build:napi": "tsx ../scripts/copy-napi.ts", "build:deps": "pnpm exec turbo run build --filter=...@truenine/memory-sync-cli --filter=!@truenine/memory-sync-cli", "bundle": "pnpm exec tsdown", "check": "run-p typecheck lint", + "generate:schema": "tsx scripts/generate-schema.ts", "lint": "eslint --cache .", "prepublishOnly": "run-s build", "test": "run-s build:deps test:run", @@ -73,51 +74,9 @@ "@truenine/memory-sync-cli-win32-x64-msvc": "workspace:*" }, "devDependencies": { - "@truenine/desk-paths": "workspace:*", "@truenine/init-bundle": "workspace:*", "@truenine/logger": "workspace:*", "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-agentskills-compact": "workspace:*", - "@truenine/plugin-agentsmd": "workspace:*", - "@truenine/plugin-antigravity": "workspace:*", - "@truenine/plugin-claude-code-cli": "workspace:*", - "@truenine/plugin-cursor": "workspace:*", - "@truenine/plugin-droid-cli": "workspace:*", - "@truenine/plugin-editorconfig": "workspace:*", - "@truenine/plugin-gemini-cli": "workspace:*", - "@truenine/plugin-git-exclude": "workspace:*", - "@truenine/plugin-input-agentskills": "workspace:*", - "@truenine/plugin-input-editorconfig": "workspace:*", - "@truenine/plugin-input-fast-command": "workspace:*", - "@truenine/plugin-input-git-exclude": "workspace:*", - "@truenine/plugin-input-gitignore": "workspace:*", - "@truenine/plugin-input-global-memory": "workspace:*", - "@truenine/plugin-input-jetbrains-config": "workspace:*", - "@truenine/plugin-input-md-cleanup-effect": "workspace:*", - "@truenine/plugin-input-orphan-cleanup-effect": "workspace:*", - "@truenine/plugin-input-project-prompt": "workspace:*", - "@truenine/plugin-input-readme": "workspace:*", - "@truenine/plugin-input-rule": "workspace:*", - "@truenine/plugin-input-shadow-project": "workspace:*", - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-input-shared-ignore": "workspace:*", - "@truenine/plugin-input-skill-sync-effect": "workspace:*", - "@truenine/plugin-input-subagent": "workspace:*", - "@truenine/plugin-input-vscode-config": "workspace:*", - "@truenine/plugin-input-workspace": "workspace:*", - "@truenine/plugin-jetbrains-ai-codex": "workspace:*", - "@truenine/plugin-jetbrains-codestyle": "workspace:*", - "@truenine/plugin-kiro-ide": "workspace:*", - "@truenine/plugin-openai-codex-cli": "workspace:*", - "@truenine/plugin-opencode-cli": "workspace:*", - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-qoder-ide": "workspace:*", - "@truenine/plugin-readme": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "@truenine/plugin-trae-ide": "workspace:*", - "@truenine/plugin-vscode": "workspace:*", - "@truenine/plugin-warp-ide": "workspace:*", - "@truenine/plugin-windsurf": "workspace:*", "@types/fs-extra": "catalog:", "@types/picomatch": "catalog:", "@vitest/coverage-v8": "catalog:", diff --git a/cli/scripts/generate-schema.ts b/cli/scripts/generate-schema.ts new file mode 100644 index 00000000..b8c124dc --- /dev/null +++ b/cli/scripts/generate-schema.ts @@ -0,0 +1,5 @@ +import {writeFileSync} from 'node:fs' +import {TNMSC_JSON_SCHEMA} from '../src/schema.ts' + +writeFileSync('./dist/tnmsc.schema.json', `${JSON.stringify(TNMSC_JSON_SCHEMA, null, 2)}\n`, 'utf8') +console.log('Schema generated successfully!') diff --git a/cli/src/ConfigLoader.test.ts b/cli/src/ConfigLoader.test.ts index f72dc568..2363ec0a 100644 --- a/cli/src/ConfigLoader.test.ts +++ b/cli/src/ConfigLoader.test.ts @@ -2,15 +2,10 @@ import * as fs from 'node:fs' import * as os from 'node:os' import * as path from 'node:path' import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest' -import {ConfigLoader, DEFAULT_CONFIG_FILE_NAME, DEFAULT_GLOBAL_CONFIG_DIR, ensureConfigLink, loadUserConfig} from './ConfigLoader' +import {ConfigLoader, DEFAULT_CONFIG_FILE_NAME, DEFAULT_GLOBAL_CONFIG_DIR, loadUserConfig} from './ConfigLoader' vi.mock('node:fs') // Mock fs module vi.mock('node:os') -vi.mock('@truenine/desk-paths', () => ({ - isSymlink: vi.fn(), - readSymlinkTarget: vi.fn(), - deletePathSync: vi.fn() -})) describe('configLoader', () => { const mockHomedir = '/home/testuser' @@ -333,132 +328,3 @@ describe('configLoader', () => { }) }) }) - -describe('ensureConfigLink', () => { - let deskPaths: typeof import('@truenine/desk-paths') - - const LOCAL = '/shadow/.tnmsc.json' - const GLOBAL = '/home/testuser/.aindex/.tnmsc.json' - - const logger = { - trace: vi.fn(), - debug: vi.fn(), - info: vi.fn(), - warn: vi.fn(), - error: vi.fn(), - fatal: vi.fn() - } - - beforeEach(async () => { - deskPaths = await import('@truenine/desk-paths') - vi.mocked(os.homedir).mockReturnValue('/home/testuser') - vi.mocked(fs.existsSync).mockReturnValue(false) - vi.mocked(fs.symlinkSync).mockImplementation(() => void 0) - vi.mocked(fs.copyFileSync).mockImplementation(() => void 0) - vi.mocked(deskPaths.isSymlink).mockReturnValue(false) - vi.mocked(deskPaths.readSymlinkTarget).mockReturnValue(null) - vi.mocked(deskPaths.deletePathSync).mockImplementation(() => void 0) - }) - - afterEach(() => vi.clearAllMocks()) - - it('no-op when global config does not exist', () => { - vi.mocked(fs.existsSync).mockReturnValue(false) - - ensureConfigLink(LOCAL, GLOBAL, logger) - - expect(fs.symlinkSync).not.toHaveBeenCalled() - expect(fs.copyFileSync).not.toHaveBeenCalled() - }) - - it('creates symlink when local file does not exist', () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL) - vi.mocked(deskPaths.isSymlink).mockReturnValue(false) - - ensureConfigLink(LOCAL, GLOBAL, logger) - - expect(fs.symlinkSync).toHaveBeenCalledWith(GLOBAL, LOCAL, 'file') - }) - - it('no-op when local is a correct symlink pointing to global', () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL || p === LOCAL) - vi.mocked(deskPaths.isSymlink).mockReturnValue(true) - vi.mocked(deskPaths.readSymlinkTarget).mockReturnValue(GLOBAL) - - ensureConfigLink(LOCAL, GLOBAL, logger) - - expect(fs.symlinkSync).not.toHaveBeenCalled() - expect(deskPaths.deletePathSync).not.toHaveBeenCalled() - }) - - it('deletes stale symlink and recreates when target differs', () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL || p === LOCAL) - vi.mocked(deskPaths.isSymlink).mockReturnValue(true) - vi.mocked(deskPaths.readSymlinkTarget).mockReturnValue('/other/path/.tnmsc.json') - - ensureConfigLink(LOCAL, GLOBAL, logger) - - expect(deskPaths.deletePathSync).toHaveBeenCalledWith(LOCAL) - expect(fs.symlinkSync).toHaveBeenCalledWith(GLOBAL, LOCAL, 'file') - }) - - it('syncs regular file back to global when local content differs, then recreates symlink', () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL || p === LOCAL) - vi.mocked(deskPaths.isSymlink).mockReturnValue(false) - vi.mocked(fs.readFileSync).mockImplementation(p => { - if (p === LOCAL) return '{"local":true}' - return '{"global":true}' - }) - - ensureConfigLink(LOCAL, GLOBAL, logger) - - expect(fs.copyFileSync).toHaveBeenCalledWith(LOCAL, GLOBAL) - expect(deskPaths.deletePathSync).toHaveBeenCalledWith(LOCAL) - expect(fs.symlinkSync).toHaveBeenCalledWith(GLOBAL, LOCAL, 'file') - }) - - it('deletes regular file without sync-back when local content matches global', () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL || p === LOCAL) - vi.mocked(deskPaths.isSymlink).mockReturnValue(false) - vi.mocked(fs.readFileSync).mockReturnValue('{"same":true}') - - ensureConfigLink(LOCAL, GLOBAL, logger) - - expect(fs.copyFileSync).not.toHaveBeenCalledWith(LOCAL, GLOBAL) - expect(deskPaths.deletePathSync).toHaveBeenCalledWith(LOCAL) - expect(fs.symlinkSync).toHaveBeenCalledWith(GLOBAL, LOCAL, 'file') - }) - - it('falls back to copy when symlink fails', () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL) - vi.mocked(deskPaths.isSymlink).mockReturnValue(false) - vi.mocked(fs.symlinkSync).mockImplementation(() => { - throw new Error('EPERM: operation not permitted') - }) - - ensureConfigLink(LOCAL, GLOBAL, logger) - - expect(fs.copyFileSync).toHaveBeenCalledWith(GLOBAL, LOCAL) - expect(logger.warn).toHaveBeenCalledWith( - 'symlink unavailable, copied config (auto-sync disabled)', - expect.objectContaining({dest: LOCAL}) - ) - }) - - it('logs warn and does not throw when both symlink and copy fail', () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL) - vi.mocked(deskPaths.isSymlink).mockReturnValue(false) - vi.mocked(fs.symlinkSync).mockImplementation(() => { - throw new Error('EPERM') - }) - vi.mocked(fs.copyFileSync).mockImplementation(() => { - throw new Error('ENOENT') - }) - - expect(() => ensureConfigLink(LOCAL, GLOBAL, logger)).not.toThrow() - expect(logger.warn).toHaveBeenCalledWith( - 'failed to link or copy config', - expect.objectContaining({path: LOCAL, error: 'ENOENT'}) - ) - }) -}) diff --git a/cli/src/ConfigLoader.ts b/cli/src/ConfigLoader.ts index 01a991f3..d002b1db 100644 --- a/cli/src/ConfigLoader.ts +++ b/cli/src/ConfigLoader.ts @@ -1,10 +1,8 @@ import type {ConfigLoaderOptions, ConfigLoadResult, ILogger, ShadowSourceProjectConfig, UserConfigFile} from '@truenine/plugin-shared' -import {createHash} from 'node:crypto' import * as fs from 'node:fs' import * as os from 'node:os' import * as path from 'node:path' import process from 'node:process' -import {deletePathSync, isSymlink, readSymlinkTarget} from '@truenine/desk-paths' import {createLogger, DEFAULT_USER_CONFIG, ZUserConfigFile} from '@truenine/plugin-shared' /** @@ -224,77 +222,6 @@ export function loadUserConfig(cwd?: string): MergedConfigResult { return getConfigLoader().load(cwd) } -/** - * Ensure a local config file is linked (symlink preferred) to the global config. - * On every run: - * - If local is a correct symlink → no-op - * - If local is a stale symlink → delete and recreate - * - If local is a regular file newer than global → sync back to global, then recreate link - * - If local is a regular file older than global → delete and recreate link - * Falls back to a file copy with a warning when symlink creation fails. - */ -export function ensureConfigLink( - localConfigPath: string, - globalConfigPath: string, - logger: ILogger -): void { - if (!fs.existsSync(globalConfigPath)) return - - if (fs.existsSync(localConfigPath) || isSymlink(localConfigPath)) { - if (isSymlink(localConfigPath)) { - const target = readSymlinkTarget(localConfigPath) - if (target !== null && path.resolve(target) === path.resolve(globalConfigPath)) return // correct symlink, no-op - deletePathSync(localConfigPath) // stale symlink — delete and fall through - } else { - const localContent = fs.readFileSync(localConfigPath) - const globalContent = fs.readFileSync(globalConfigPath) - const localHash = createHash('sha256').update(localContent).digest('hex') - const globalHash = createHash('sha256').update(globalContent).digest('hex') - if (localHash !== globalHash) { - fs.copyFileSync(localConfigPath, globalConfigPath) // local differs: sync back to global - logger.debug('synced local config back to global', {src: localConfigPath, dest: globalConfigPath}) - } - deletePathSync(localConfigPath) - } - } - - try { - fs.symlinkSync(globalConfigPath, localConfigPath, 'file') - logger.debug('linked config', {link: localConfigPath, target: globalConfigPath}) - } - catch { - try { - fs.copyFileSync(globalConfigPath, localConfigPath) // fallback copy: auto-sync disabled, local edits preserved on next run via content-hash check - logger.warn('symlink unavailable, copied config (auto-sync disabled)', {dest: localConfigPath}) - } - catch (copyErr) { - logger.warn('failed to link or copy config', { - path: localConfigPath, - error: copyErr instanceof Error ? copyErr.message : String(copyErr) - }) - } - } -} - -/** - * Ensure the shadow source project directory has a .tnmsc.json symlink - * pointing to the global config. Creates a symlink where possible, falls - * back to a file copy when symlinks are unavailable (e.g. Windows without - * Developer Mode). On every run, syncs edits made inside the shadow back - * to the global config before relinking. - */ -export function ensureShadowProjectConfigLink(shadowProjectDir: string, logger: ILogger): void { - const resolved = shadowProjectDir.startsWith('~') - ? path.join(os.homedir(), shadowProjectDir.slice(1)) - : shadowProjectDir - - if (!fs.existsSync(resolved)) return - - const globalConfigPath = getGlobalConfigPath() - const configPath = path.join(resolved, DEFAULT_CONFIG_FILE_NAME) - ensureConfigLink(configPath, globalConfigPath, logger) -} - /** * Validate global config file strictly. * - If config doesn't exist: create default config, log warn, continue diff --git a/cli/src/PluginPipeline.ts b/cli/src/PluginPipeline.ts index fbd9c828..ae3361eb 100644 --- a/cli/src/PluginPipeline.ts +++ b/cli/src/PluginPipeline.ts @@ -4,9 +4,9 @@ import type {Command, CommandContext} from '@/commands' import type {PipelineConfig} from '@/config' import * as fs from 'node:fs' import * as path from 'node:path' -import {GlobalScopeCollector, ScopePriority, ScopeRegistry} from '@truenine/plugin-input-shared/scope' +import {GlobalScopeCollector, ScopePriority, ScopeRegistry} from '@truenine/plugin-input-shared' import {CircularDependencyError, createLogger, MissingDependencyError, setGlobalLogLevel} from '@truenine/plugin-shared' -import * as glob from 'fast-glob' +import glob from 'fast-glob' import { CleanCommand, ConfigCommand, diff --git a/cli/src/commands/CleanupUtils.ts b/cli/src/commands/CleanupUtils.ts index 4d4a6d09..d504440f 100644 --- a/cli/src/commands/CleanupUtils.ts +++ b/cli/src/commands/CleanupUtils.ts @@ -1,7 +1,7 @@ -import type {ILogger, OutputCleanContext, OutputPlugin} from '@truenine/plugin-shared' +import type {ILogger, OutputCleanContext, OutputPlugin} from '../plugins/plugin-shared' import * as path from 'node:path' -import {deleteDirectories as deskDeleteDirectories, deleteFiles as deskDeleteFiles} from '@truenine/desk-paths' -import {checkCanClean, collectAllPluginOutputs, executeOnCleanComplete} from '@truenine/plugin-shared' +import {deleteDirectories as deskDeleteDirectories, deleteFiles as deskDeleteFiles} from '../plugins/desk-paths' +import {checkCanClean, collectAllPluginOutputs, executeOnCleanComplete} from '../plugins/plugin-shared' /** * Result of cleanup operation diff --git a/cli/src/commands/Command.ts b/cli/src/commands/Command.ts index 5291365d..4f8b14b3 100644 --- a/cli/src/commands/Command.ts +++ b/cli/src/commands/Command.ts @@ -1,4 +1,4 @@ -import type {CollectedInputContext, ILogger, OutputCleanContext, OutputPlugin, OutputWriteContext, PluginOptions, UserConfigFile} from '@truenine/plugin-shared' +import type {CollectedInputContext, ILogger, OutputCleanContext, OutputPlugin, OutputWriteContext, PluginOptions, UserConfigFile} from '../plugins/plugin-shared' /** * Command execution context diff --git a/cli/src/commands/CommandUtils.ts b/cli/src/commands/CommandUtils.ts index e76942cf..17ca3adf 100644 --- a/cli/src/commands/CommandUtils.ts +++ b/cli/src/commands/CommandUtils.ts @@ -1,5 +1,5 @@ -import type {OutputPlugin, OutputWriteContext} from '@truenine/plugin-shared' -import {checkCanWrite} from '@truenine/plugin-shared' +import type {OutputPlugin, OutputWriteContext} from '../plugins/plugin-shared' +import {checkCanWrite} from '../plugins/plugin-shared' /** * Filter plugins based on write permissions. diff --git a/cli/src/commands/DryRunCleanCommand.ts b/cli/src/commands/DryRunCleanCommand.ts index 758e78a4..4d3b105a 100644 --- a/cli/src/commands/DryRunCleanCommand.ts +++ b/cli/src/commands/DryRunCleanCommand.ts @@ -1,6 +1,6 @@ import type {Command, CommandContext, CommandResult} from './Command' import * as path from 'node:path' -import {checkCanClean, collectAllPluginOutputs, executeOnCleanComplete} from '@truenine/plugin-shared' +import {checkCanClean, collectAllPluginOutputs, executeOnCleanComplete} from '../plugins/plugin-shared' import {collectDeletionTargets} from './CleanupUtils' /** diff --git a/cli/src/commands/DryRunOutputCommand.ts b/cli/src/commands/DryRunOutputCommand.ts index 72a212eb..f90da009 100644 --- a/cli/src/commands/DryRunOutputCommand.ts +++ b/cli/src/commands/DryRunOutputCommand.ts @@ -1,5 +1,5 @@ import type {Command, CommandContext, CommandResult} from './Command' -import {checkCanWrite, executeWriteOutputs} from '@truenine/plugin-shared' +import {checkCanWrite, executeWriteOutputs} from '../plugins/plugin-shared' /** * Dry-run output command - simulates write operations without actual I/O diff --git a/cli/src/commands/ExecuteCommand.ts b/cli/src/commands/ExecuteCommand.ts index 222907fb..dcdad900 100644 --- a/cli/src/commands/ExecuteCommand.ts +++ b/cli/src/commands/ExecuteCommand.ts @@ -1,5 +1,5 @@ import type {Command, CommandContext, CommandResult} from './Command' -import {checkCanWrite, executeWriteOutputs} from '@truenine/plugin-shared' +import {checkCanWrite, executeWriteOutputs} from '../plugins/plugin-shared' import {performCleanup} from './CleanupUtils' /** diff --git a/cli/src/commands/InitCommand.test.ts b/cli/src/commands/InitCommand.test.ts index 3237cb45..2dda0df1 100644 --- a/cli/src/commands/InitCommand.test.ts +++ b/cli/src/commands/InitCommand.test.ts @@ -1,18 +1,9 @@ import type {CommandContext, CommandResult} from './Command' -import * as fs from 'node:fs' import * as os from 'node:os' -import * as path from 'node:path' import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest' -import {DEFAULT_CONFIG_FILE_NAME, DEFAULT_GLOBAL_CONFIG_DIR} from '@/ConfigLoader' import {InitCommand} from './InitCommand' -vi.mock('node:fs') vi.mock('node:os') -vi.mock('@truenine/desk-paths', () => ({ - isSymlink: vi.fn(() => false), - readSymlinkTarget: vi.fn(() => null), - deletePathSync: vi.fn() -})) vi.mock('@/ShadowSourceProject', () => ({ generateShadowSourceProject: vi.fn(() => ({ success: true, @@ -25,9 +16,6 @@ vi.mock('@/ShadowSourceProject', () => ({ })) const MOCK_HOME = '/home/testuser' -const MOCK_CWD = '/workspace/myproject' -const GLOBAL_CONFIG_PATH = path.join(MOCK_HOME, DEFAULT_GLOBAL_CONFIG_DIR, DEFAULT_CONFIG_FILE_NAME) -const CWD_CONFIG_PATH = path.join(MOCK_CWD, DEFAULT_CONFIG_FILE_NAME) function makeCtx(overrides: Partial = {}): CommandContext { const logger = { @@ -65,13 +53,7 @@ function makeCtx(overrides: Partial = {}): CommandContext { } describe('initCommand', () => { - beforeEach(() => { - vi.mocked(os.homedir).mockReturnValue(MOCK_HOME) - vi.spyOn(process, 'cwd').mockReturnValue(MOCK_CWD) - vi.mocked(fs.existsSync).mockReturnValue(false) - vi.mocked(fs.symlinkSync).mockImplementation(() => void 0) - vi.mocked(fs.copyFileSync).mockImplementation(() => void 0) - }) + beforeEach(() => vi.mocked(os.homedir).mockReturnValue(MOCK_HOME)) afterEach(() => vi.clearAllMocks()) @@ -95,116 +77,4 @@ describe('initCommand', () => { expect(result.message!.length).toBeGreaterThan(0) }) }) - - describe('linkCwdConfig — symlink happy path', () => { - it('creates a symlink at cwd/.tnmsc.json pointing to global config', async () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL_CONFIG_PATH) - - await new InitCommand().execute(makeCtx()) - - expect(fs.symlinkSync).toHaveBeenCalledWith(GLOBAL_CONFIG_PATH, CWD_CONFIG_PATH, 'file') - }) - - it('logs debug after successful symlink creation', async () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL_CONFIG_PATH) - const ctx = makeCtx() - - await new InitCommand().execute(ctx) - - expect(ctx.logger.debug).toHaveBeenCalledWith( - 'linked config', - expect.objectContaining({link: CWD_CONFIG_PATH, target: GLOBAL_CONFIG_PATH}) - ) - }) - }) - - describe('linkCwdConfig — symlink fallback to copy', () => { - it('falls back to copyFileSync when symlinkSync throws', async () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL_CONFIG_PATH) - vi.mocked(fs.symlinkSync).mockImplementation(() => { - throw new Error('EPERM: operation not permitted') - }) - - await new InitCommand().execute(makeCtx()) - - expect(fs.copyFileSync).toHaveBeenCalledWith(GLOBAL_CONFIG_PATH, CWD_CONFIG_PATH) - }) - - it('logs warn when falling back to copy', async () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL_CONFIG_PATH) - vi.mocked(fs.symlinkSync).mockImplementation(() => { - throw new Error('EPERM: operation not permitted') - }) - const ctx = makeCtx() - - await new InitCommand().execute(ctx) - - expect(ctx.logger.warn).toHaveBeenCalledWith( - 'symlink unavailable, copied config (auto-sync disabled)', - expect.objectContaining({dest: CWD_CONFIG_PATH}) - ) - }) - - it('logs warn when both symlink and copy fail', async () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL_CONFIG_PATH) - vi.mocked(fs.symlinkSync).mockImplementation(() => { - throw new Error('EPERM: operation not permitted') - }) - vi.mocked(fs.copyFileSync).mockImplementation(() => { - throw new Error('ENOENT: no such file or directory') - }) - const ctx = makeCtx() - - await new InitCommand().execute(ctx) - - expect(ctx.logger.warn).toHaveBeenCalledWith( - 'failed to link or copy config', - expect.objectContaining({path: CWD_CONFIG_PATH, error: 'ENOENT: no such file or directory'}) - ) - }) - - it('does not throw when both symlink and copy fail', async () => { - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL_CONFIG_PATH) - vi.mocked(fs.symlinkSync).mockImplementation(() => { - throw new Error('EPERM') - }) - vi.mocked(fs.copyFileSync).mockImplementation(() => { - throw new Error('ENOENT') - }) - - await expect(new InitCommand().execute(makeCtx())).resolves.not.toThrow() - }) - }) - - describe('linkCwdConfig — path construction', () => { - it('uses process.cwd() for cwd config path', async () => { - const customCwd = '/custom/project/dir' - vi.spyOn(process, 'cwd').mockReturnValue(customCwd) - const expectedCwdConfig = path.join(customCwd, DEFAULT_CONFIG_FILE_NAME) - vi.mocked(fs.existsSync).mockImplementation(p => p === GLOBAL_CONFIG_PATH) - - await new InitCommand().execute(makeCtx()) - - expect(fs.symlinkSync).toHaveBeenCalledWith( - expect.any(String), - expectedCwdConfig, - 'file' - ) - }) - - it('uses os.homedir() for global config path', async () => { - const customHome = '/custom/home' - vi.mocked(os.homedir).mockReturnValue(customHome) - const expectedGlobal = path.join(customHome, DEFAULT_GLOBAL_CONFIG_DIR, DEFAULT_CONFIG_FILE_NAME) - vi.mocked(fs.existsSync).mockImplementation(p => p === expectedGlobal) - - await new InitCommand().execute(makeCtx()) - - expect(fs.symlinkSync).toHaveBeenCalledWith( - expectedGlobal, - expect.any(String), - 'file' - ) - }) - }) }) diff --git a/cli/src/commands/InitCommand.ts b/cli/src/commands/InitCommand.ts index aca2695e..ed34d196 100644 --- a/cli/src/commands/InitCommand.ts +++ b/cli/src/commands/InitCommand.ts @@ -1,8 +1,6 @@ import type {Command, CommandContext, CommandResult} from './Command' import * as os from 'node:os' import * as path from 'node:path' -import process from 'node:process' -import {DEFAULT_CONFIG_FILE_NAME, ensureConfigLink, getGlobalConfigPath} from '@/ConfigLoader' import {generateShadowSourceProject} from '@/ShadowSourceProject' /** @@ -14,17 +12,6 @@ function resolveWorkspacePath(workspaceDir: string): string { return path.normalize(resolved) } -/** - * Link cwd config to global config via symlink. - * Falls back to a file copy with a warning if symlink creation fails (e.g. Windows without Developer Mode). - * On every run, syncs edits made in cwd back to the global config before relinking. - */ -function linkCwdConfig(logger: CommandContext['logger']): void { - const globalConfigPath = getGlobalConfigPath() - const cwdConfigPath = path.join(process.cwd(), DEFAULT_CONFIG_FILE_NAME) - ensureConfigLink(cwdConfigPath, globalConfigPath, logger) -} - /** * Init command - initializes shadow source project directory structure */ @@ -42,8 +29,6 @@ export class InitCommand implements Command { const result = generateShadowSourceProject(shadowSourceProjectDir, {logger}) // Generate shadow source project structure - linkCwdConfig(logger) // Link cwd config to global config - const message = result.createdDirs.length === 0 && result.createdFiles.length === 0 ? `All ${result.existedDirs.length} directories and ${result.existedFiles.length} files already exist` : `Created ${result.createdDirs.length} directories and ${result.createdFiles.length} files (${result.existedDirs.length} dirs, ${result.existedFiles.length} files already existed)` diff --git a/cli/src/commands/PluginsCommand.ts b/cli/src/commands/PluginsCommand.ts index ca355571..8a040cb6 100644 --- a/cli/src/commands/PluginsCommand.ts +++ b/cli/src/commands/PluginsCommand.ts @@ -1,6 +1,6 @@ import type {Command, CommandContext, CommandResult, JsonPluginInfo} from './Command' import process from 'node:process' -import {PluginKind} from '@truenine/plugin-shared' +import {PluginKind} from '../plugins/plugin-shared' /** * Command that outputs all registered plugin information as JSON. diff --git a/cli/src/compiler-integration.test.ts b/cli/src/compiler-integration.test.ts index ef9aad70..ca26761e 100644 --- a/cli/src/compiler-integration.test.ts +++ b/cli/src/compiler-integration.test.ts @@ -13,8 +13,7 @@ import * as fs from 'node:fs' import * as path from 'node:path' import {clearComponents, mdxToMd, registerBuiltInComponents} from '@truenine/md-compiler' import {ShellKind} from '@truenine/md-compiler/globals' -import {AbstractInputPlugin} from '@truenine/plugin-input-shared' -import {GlobalScopeCollector, ScopePriority, ScopeRegistry} from '@truenine/plugin-input-shared/scope' +import {AbstractInputPlugin, GlobalScopeCollector, ScopePriority, ScopeRegistry} from '@truenine/plugin-input-shared' import {createLogger} from '@truenine/plugin-shared' import glob from 'fast-glob' import {afterEach, beforeEach, describe, expect, it} from 'vitest' diff --git a/cli/src/config.ts b/cli/src/config.ts index 46df89d3..9fdb0b27 100644 --- a/cli/src/config.ts +++ b/cli/src/config.ts @@ -3,8 +3,8 @@ import * as fs from 'node:fs' import * as path from 'node:path' import process from 'node:process' import {createLogger, DEFAULT_USER_CONFIG, PluginKind} from '@truenine/plugin-shared' -import * as glob from 'fast-glob' -import {ensureShadowProjectConfigLink, loadUserConfig, validateAndEnsureGlobalConfig} from './ConfigLoader' +import glob from 'fast-glob' +import {loadUserConfig, validateAndEnsureGlobalConfig} from './ConfigLoader' import {PluginPipeline} from './PluginPipeline' import {checkVersionControl} from './ShadowSourceProject' @@ -18,7 +18,7 @@ export interface PipelineConfig { } const DEFAULT_SHADOW_SOURCE_PROJECT: Required = { - name: 'tnmsc-shadow', + name: 'aindex', skill: {src: 'src/skills', dist: 'dist/skills'}, fastCommand: {src: 'src/commands', dist: 'dist/commands'}, subAgent: {src: 'src/agents', dist: 'dist/agents'}, @@ -207,10 +207,6 @@ export async function defineConfig(options: PluginOptions | DefineConfigOptions }) } - if (mergedOptions.workspaceDir != null) { // Auto-link .tnmsc.json into shadow source project dir (skip if workspaceDir unavailable, e.g. CI without napi binary) - ensureShadowProjectConfigLink(path.join(mergedOptions.workspaceDir, mergedOptions.shadowSourceProject.name), logger) - } - const baseCtx: Omit = { // Base context without dependencyContext, globalScope, scopeRegistry (will be provided by pipeline) logger, userConfigOptions: mergedOptions, diff --git a/cli/src/config/ConfigService.test.ts b/cli/src/config/ConfigService.test.ts new file mode 100644 index 00000000..85050217 --- /dev/null +++ b/cli/src/config/ConfigService.test.ts @@ -0,0 +1,336 @@ +/** + * Unit tests for ConfigService + */ + +import * as fs from 'node:fs' +import * as os from 'node:os' +import * as path from 'node:path' +import {afterEach, beforeEach, describe, expect, it} from 'vitest' +import {ConfigService, getDefaultConfigPath} from './ConfigService' +import { + ConfigFileNotFoundError, + ConfigParseError, + ConfigValidationError +} from './errors' + +describe('configService', () => { + let tempDir: string, + configService: ConfigService + + beforeEach(() => { + tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'tnmsc-config-test-')) + ConfigService.resetInstance() + configService = ConfigService.getInstance({configPath: path.join(tempDir, '.tnmsc.json')}) + }) + + afterEach(() => { + ConfigService.resetInstance() + try { // Clean up temp directory + fs.rmSync(tempDir, {recursive: true, force: true}) + } + catch { + } // Ignore cleanup errors + }) + + describe('singleton pattern', () => { + it('should return the same instance', () => { + const instance1 = ConfigService.getInstance() + const instance2 = ConfigService.getInstance() + expect(instance1).toBe(instance2) + }) + + it('should create new instance after reset', () => { + const instance1 = ConfigService.getInstance() + ConfigService.resetInstance() + const instance2 = ConfigService.getInstance() + expect(instance1).not.toBe(instance2) + }) + }) + + describe('load', () => { + it('should load valid configuration', () => { + const validConfig = { + version: '2026.10218.12101', + workspaceDir: '~/project', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test User', + username: 'testuser', + gender: 'male', + birthday: '1990-01-01' + } + } + + fs.writeFileSync(configService.getConfigPath(), JSON.stringify(validConfig, null, 2)) + + const config = configService.load() + + expect(config.version).toBe('2026.10218.12101') + expect(config.workspaceDir).toBe('~/project') + expect(config.logLevel).toBe('info') + expect(config.profile.name).toBe('Test User') + expect(config.aindex.name).toBe('aindex') + expect(config.aindex.skills.src).toBe('skills') + }) + + it('should throw ConfigFileNotFoundError for missing file', () => { + expect(() => configService.load()).toThrow(ConfigFileNotFoundError) + }) + + it('should throw ConfigParseError for invalid JSON', () => { + fs.writeFileSync(configService.getConfigPath(), 'not valid json') + expect(() => configService.load()).toThrow(ConfigParseError) + }) + + it('should throw ConfigValidationError for missing required fields', () => { + const invalidConfig = { + version: '2026.10218.12101' + } // missing workspaceDir, aindex, logLevel, profile + + fs.writeFileSync(configService.getConfigPath(), JSON.stringify(invalidConfig)) + expect(() => configService.load()).toThrow(ConfigValidationError) + }) + + it('should throw ConfigValidationError for invalid version format', () => { + const invalidConfig = { + version: 'invalid-version', + workspaceDir: '~/project', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test User', + username: 'testuser', + gender: 'male', + birthday: '1990-01-01' + } + } + + fs.writeFileSync(configService.getConfigPath(), JSON.stringify(invalidConfig)) + expect(() => configService.load()).toThrow(ConfigValidationError) + }) + + it('should throw ConfigValidationError for invalid logLevel', () => { + const invalidConfig = { + version: '2026.10218.12101', + workspaceDir: '~/project', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'invalid-level', + profile: { + name: 'Test User', + username: 'testuser', + gender: 'male', + birthday: '1990-01-01' + } + } + + fs.writeFileSync(configService.getConfigPath(), JSON.stringify(invalidConfig)) + expect(() => configService.load()).toThrow(ConfigValidationError) + }) + }) + + describe('safeLoad', () => { + it('should return config when file exists', () => { + const validConfig = { + version: '2026.10218.12101', + workspaceDir: '~/project', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test User', + username: 'testuser', + gender: 'male', + birthday: '1990-01-01' + } + } + + fs.writeFileSync(configService.getConfigPath(), JSON.stringify(validConfig, null, 2)) + + const result = configService.safeLoad() + + expect(result.found).toBe(true) + expect(result.source).toBe(configService.getConfigPath()) + expect(result.config.version).toBe('2026.10218.12101') + }) + + it('should return default config when file not found', () => { + const result = configService.safeLoad() + + expect(result.found).toBe(false) + expect(result.config).toBeDefined() + expect(result.config.workspaceDir).toBe('~/project') + }) + + it('should throw for invalid JSON even in safeLoad', () => { + fs.writeFileSync(configService.getConfigPath(), 'not valid json') + expect(() => configService.safeLoad()).toThrow(ConfigParseError) + }) + }) + + describe('reload', () => { + it('should reload configuration from disk', () => { + const config1 = { + version: '2026.10218.12101', + workspaceDir: '~/project', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test User', + username: 'testuser', + gender: 'male', + birthday: '1990-01-01' + } + } + + fs.writeFileSync(configService.getConfigPath(), JSON.stringify(config1)) + configService.load() + + const config2 = { + ...config1, + version: '2026.10219.00000' + } + + fs.writeFileSync(configService.getConfigPath(), JSON.stringify(config2)) + const reloaded = configService.reload() + + expect(reloaded.version).toBe('2026.10219.00000') + }) + }) + + describe('getConfig', () => { + it('should return loaded configuration', () => { + const validConfig = { + version: '2026.10218.12101', + workspaceDir: '~/project', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test User', + username: 'testuser', + gender: 'male', + birthday: '1990-01-01' + } + } + + fs.writeFileSync(configService.getConfigPath(), JSON.stringify(validConfig)) + configService.load() + + const config = configService.getConfig() + expect(config.version).toBe('2026.10218.12101') + }) + + it('should throw if configuration not loaded', () => { + expect(() => configService.getConfig()).toThrow('Configuration has not been loaded') + }) + }) + + describe('isLoaded', () => { + it('should return false before loading', () => expect(configService.isLoaded()).toBe(false)) + + it('should return true after loading', () => { + const validConfig = { + version: '2026.10218.12101', + workspaceDir: '~/project', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test User', + username: 'testuser', + gender: 'male', + birthday: '1990-01-01' + } + } + + fs.writeFileSync(configService.getConfigPath(), JSON.stringify(validConfig)) + configService.load() + + expect(configService.isLoaded()).toBe(true) + }) + }) + + describe('getDefaultConfigPath', () => { + it('should return path in home directory', () => { + const defaultPath = getDefaultConfigPath() + expect(defaultPath).toContain('.aindex') + expect(defaultPath).toContain('.tnmsc.json') + expect(path.isAbsolute(defaultPath)).toBe(true) + }) + }) +}) diff --git a/cli/src/config/ConfigService.ts b/cli/src/config/ConfigService.ts new file mode 100644 index 00000000..79f8c1b0 --- /dev/null +++ b/cli/src/config/ConfigService.ts @@ -0,0 +1,231 @@ +/** + * Configuration service for the TNMSC configuration system. + * + * This module provides a singleton service for loading, validating, + * and accessing configuration from ~/.aindex/.tnmsc.json + */ + +import type {ConfigLoadResult, ConfigServiceOptions, TnmscConfig} from './types' +import * as fs from 'node:fs' +import * as os from 'node:os' +import * as path from 'node:path' +import { + ConfigError, + ConfigFileNotFoundError, + ConfigParseError, + ConfigPermissionError, + ConfigValidationError +} from './errors' +import {clearPathCache} from './pathResolver' +import {validateConfig} from './schema' + +/** + * Default configuration file name. + */ +export const DEFAULT_CONFIG_FILE_NAME = '.tnmsc.json' + +/** + * Default global configuration directory (relative to home). + */ +export const DEFAULT_GLOBAL_CONFIG_DIR = '.aindex' + +/** + * Get the default global configuration file path. + * + * @returns The absolute path to ~/.aindex/.tnmsc.json + */ +export function getDefaultConfigPath(): string { + return path.join(os.homedir(), DEFAULT_GLOBAL_CONFIG_DIR, DEFAULT_CONFIG_FILE_NAME) +} + +/** + * Configuration service singleton for managing TNMSC configuration. + * + * This service provides: + * - Singleton access to configuration across the application + * - Automatic validation of configuration files + * - Runtime configuration reloading + * - Comprehensive error handling + */ +export class ConfigService { + private static instance: ConfigService | null = null + + private config: TnmscConfig | null = null + private configPath: string + private loadError: ConfigError | null = null + + private constructor(options: ConfigServiceOptions = {}) { + this.configPath = options.configPath ?? getDefaultConfigPath() + } + + static getInstance(options?: ConfigServiceOptions): ConfigService { + ConfigService.instance ??= new ConfigService(options) + return ConfigService.instance + } + + static resetInstance(): void { + ConfigService.instance = null + } + + load(): TnmscConfig { + this.loadError = null + + if (!fs.existsSync(this.configPath)) { // Check if file exists + this.loadError = new ConfigFileNotFoundError(this.configPath) + throw this.loadError + } + + let content: string // Read file content + try { + content = fs.readFileSync(this.configPath, 'utf8') + } + catch (error) { + const configError = new ConfigPermissionError( + this.configPath, + error instanceof Error ? error : new Error(String(error)) + ) + this.loadError = configError + throw configError + } + + let parsed: unknown // Parse JSON + try { + parsed = JSON.parse(content) + } + catch (error) { + if (error instanceof SyntaxError) { + const configError = new ConfigParseError(this.configPath, error) + this.loadError = configError + throw configError + } + throw error + } + + try { // Validate configuration + this.config = validateConfig(parsed) + clearPathCache() // Clear path cache when config is reloaded + return this.config + } + catch (error) { + if (error instanceof Error && error.name === 'ZodError') { + const zodError = error as unknown as {issues: {path: (string | number)[], message: string}[]} + const validationErrors = zodError.issues.map( + issue => `${issue.path.join('.')}: ${issue.message}` + ) + const configError = new ConfigValidationError(this.configPath, validationErrors) + this.loadError = configError + throw configError + } + throw error + } + } + + safeLoad(): ConfigLoadResult { + try { + const config = this.load() + return { + config, + source: this.configPath, + found: true + } + } + catch (error) { + if (error instanceof ConfigFileNotFoundError) { + return { // Return a default-like config for missing files + config: this.getDefaultConfig(), + source: this.configPath, + found: false + } + } + throw error + } + } + + reload(): TnmscConfig { + this.config = null + return this.load() + } + + getConfig(): TnmscConfig { + if (this.config === null) { + throw new ConfigError( + 'Configuration has not been loaded. Call load() first.', + this.configPath + ) + } + return this.config + } + + isLoaded(): boolean { + return this.config !== null + } + + getLastError(): ConfigError | null { + return this.loadError + } + + getConfigPath(): string { + return this.configPath + } + + setConfigPath(configPath: string): void { + this.configPath = configPath + this.config = null // Reset loaded config + this.loadError = null + } + + private getDefaultConfig(): TnmscConfig { + return { + version: '2026.00000.00000', + workspaceDir: '~/project', + logLevel: 'info', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + profile: { + name: '', + username: '', + gender: '', + birthday: '' + } + } + } +} + +/** + * Convenience function to get the ConfigService singleton instance. + * + * @param options - Optional configuration options + * @returns The ConfigService instance + */ +export function getConfigService(options?: ConfigServiceOptions): ConfigService { + return ConfigService.getInstance(options) +} + +/** + * Load configuration using the default ConfigService instance. + * + * @returns The loaded configuration + * @throws {ConfigError} If loading or validation fails + */ +export function loadConfig(): TnmscConfig { + return getConfigService().load() +} + +/** + * Safely load configuration using the default ConfigService instance. + * + * @returns The load result with success flag + */ +export function safeLoadConfig(): ConfigLoadResult { + return getConfigService().safeLoad() +} diff --git a/cli/src/config/accessors.ts b/cli/src/config/accessors.ts new file mode 100644 index 00000000..5fae229b --- /dev/null +++ b/cli/src/config/accessors.ts @@ -0,0 +1,245 @@ +/** + * Configuration accessor functions for the TNMSC configuration system. + * + * This module provides convenient accessor functions for retrieving + * specific configuration values and resolved paths. + */ + +import type { + LogLevel, + ModulePaths, + Profile, + ResolvedModulePaths, + TnmscConfig +} from './types' +import {ConfigService} from './ConfigService' +import { + getAbsoluteWorkspaceDir, + getAindexModulePaths as resolveAindexModulePaths, + resolveAllAindexPaths +} from './pathResolver' + +/** + * Get the configuration from the default ConfigService instance. + * + * @returns The current configuration + * @throws {ConfigError} If configuration hasn't been loaded + */ +export function getConfig(): TnmscConfig { + return ConfigService.getInstance().getConfig() +} + +export function getVersion(config?: TnmscConfig): string { + const cfg = config ?? getConfig() + return cfg.version +} + +/** + * Get the workspace directory from the configuration. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The workspace directory path (with ~ expanded) + */ +export function getWorkspaceDir(config?: TnmscConfig): string { + const cfg = config ?? getConfig() + return cfg.workspaceDir +} + +/** + * Get the absolute workspace directory path. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The absolute workspace directory path + */ +export function getAbsoluteWorkspaceDirPath(config?: TnmscConfig): string { + const cfg = config ?? getConfig() + return getAbsoluteWorkspaceDir(cfg.workspaceDir) +} + +/** + * Get the log level from the configuration. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The log level setting + */ +export function getLogLevel(config?: TnmscConfig): LogLevel { + const cfg = config ?? getConfig() + return cfg.logLevel +} + +/** + * Get the profile information from the configuration. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The user profile + */ +export function getProfile(config?: TnmscConfig): Profile { + const cfg = config ?? getConfig() + return cfg.profile +} + +/** + * Get the aindex configuration. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The aindex configuration + */ +export function getAindexConfig(config?: TnmscConfig): TnmscConfig['aindex'] { + const cfg = config ?? getConfig() + return cfg.aindex +} + +/** + * Get a specific aindex module's paths. + * + * @param moduleName - The name of the module (e.g., 'skills', 'commands') + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The module's src/dist paths + */ +export function getAindexModulePaths( + moduleName: keyof TnmscConfig['aindex'] & string, + config?: TnmscConfig +): ModulePaths { + const cfg = config ?? getConfig() + const modulePaths = cfg.aindex[moduleName] + + if (modulePaths === void 0 || modulePaths === null || typeof modulePaths !== 'object' || !('src' in modulePaths)) { + throw new Error(`Invalid aindex module: ${moduleName}`) + } + + return modulePaths +} + +/** + * Get a specific aindex module's resolved paths (absolute and relative). + * + * @param moduleName - The name of the module (e.g., 'skills', 'commands') + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The resolved module paths + */ +export function getResolvedAindexModulePaths( + moduleName: keyof TnmscConfig['aindex'] & string, + config?: TnmscConfig +): ResolvedModulePaths { + const cfg = config ?? getConfig() + return resolveAindexModulePaths(cfg, moduleName) +} + +/** + * Get all resolved aindex module paths. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns Object with all module paths resolved + */ +export function getAllResolvedAindexPaths(config?: TnmscConfig): ReturnType { + const cfg = config ?? getConfig() + return resolveAllAindexPaths(cfg) +} + +/** + * Get the skills module paths. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The skills module paths + */ +export function getSkillsPaths(config?: TnmscConfig): ModulePaths { + return getAindexModulePaths('skills', config) +} + +/** + * Get the commands module paths. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The commands module paths + */ +export function getCommandsPaths(config?: TnmscConfig): ModulePaths { + return getAindexModulePaths('commands', config) +} + +/** + * Get the sub-agents module paths. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The sub-agents module paths + */ +export function getSubAgentsPaths(config?: TnmscConfig): ModulePaths { + return getAindexModulePaths('subAgents', config) +} + +/** + * Get the rules module paths. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The rules module paths + */ +export function getRulesPaths(config?: TnmscConfig): ModulePaths { + return getAindexModulePaths('rules', config) +} + +/** + * Get the global prompt file paths. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The global prompt file paths + */ +export function getGlobalPromptPaths(config?: TnmscConfig): ModulePaths { + return getAindexModulePaths('globalPrompt', config) +} + +/** + * Get the workspace prompt file paths. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The workspace prompt file paths + */ +export function getWorkspacePromptPaths(config?: TnmscConfig): ModulePaths { + return getAindexModulePaths('workspacePrompt', config) +} + +/** + * Get the app module paths. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The app module paths + */ +export function getAppPaths(config?: TnmscConfig): ModulePaths { + return getAindexModulePaths('app', config) +} + +/** + * Get the ext module paths. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The ext module paths + */ +export function getExtPaths(config?: TnmscConfig): ModulePaths { + return getAindexModulePaths('ext', config) +} + +/** + * Get the arch module paths. + * + * @param config - Optional configuration object (uses loaded config if not provided) + * @returns The arch module paths + */ +export function getArchPaths(config?: TnmscConfig): ModulePaths { + return getAindexModulePaths('arch', config) +} + +/** + * Check if the configuration has been loaded. + * + * @returns True if configuration is loaded + */ +export function isConfigLoaded(): boolean { + return ConfigService.getInstance().isLoaded() +} + +/** + * Reload the configuration from disk. + * + * @returns The reloaded configuration + */ +export function reloadConfig(): TnmscConfig { + return ConfigService.getInstance().reload() +} diff --git a/cli/src/config/errors.ts b/cli/src/config/errors.ts new file mode 100644 index 00000000..ca408f69 --- /dev/null +++ b/cli/src/config/errors.ts @@ -0,0 +1,164 @@ +/** + * Error classes for the TNMSC configuration system. + * + * This module provides specific error types for different configuration + * failure scenarios, enabling better error handling and user feedback. + */ + +/** + * Base error class for all configuration-related errors. + */ +export class ConfigError extends Error { + readonly configPath: string | undefined + + constructor(message: string, configPath?: string) { + super(message) + this.name = 'ConfigError' + this.configPath = configPath ?? void 0 + + if (Error.captureStackTrace !== void 0 && Error.captureStackTrace !== null) { // Maintain proper stack trace in V8 environments + Error.captureStackTrace(this, ConfigError) + } + } + + override toString(): string { + const pathInfo = this.configPath !== void 0 && this.configPath !== null && this.configPath.length > 0 ? ` (${this.configPath})` : '' + return `${this.name}${pathInfo}: ${this.message}` + } +} + +/** + * Error thrown when the configuration file cannot be found. + */ +export class ConfigFileNotFoundError extends ConfigError { + constructor(configPath: string) { + super(`Configuration file not found: ${configPath}`, configPath) + this.name = 'ConfigFileNotFoundError' + + if (Error.captureStackTrace !== void 0 && Error.captureStackTrace !== null) Error.captureStackTrace(this, ConfigFileNotFoundError) + } +} + +/** + * Error thrown when the configuration file contains invalid JSON. + */ +export class ConfigParseError extends ConfigError { + readonly syntaxError: SyntaxError + + constructor(configPath: string, syntaxError: SyntaxError) { + super(`Invalid JSON in configuration file: ${syntaxError.message}`, configPath) + this.name = 'ConfigParseError' + this.syntaxError = syntaxError + + if (Error.captureStackTrace !== void 0 && Error.captureStackTrace !== null) Error.captureStackTrace(this, ConfigParseError) + } +} + +/** + * Error thrown when the configuration fails schema validation. + */ +export class ConfigValidationError extends ConfigError { + readonly validationErrors: readonly string[] + + constructor(configPath: string, validationErrors: string[]) { + const errorList = validationErrors.join('; ') + super(`Configuration validation failed: ${errorList}`, configPath) + this.name = 'ConfigValidationError' + this.validationErrors = validationErrors + + if (Error.captureStackTrace !== void 0 && Error.captureStackTrace !== null) Error.captureStackTrace(this, ConfigValidationError) + } + + get formattedErrors(): string { + return this.validationErrors.map((err, i) => ` ${i + 1}. ${err}`).join('\n') + } + + override toString(): string { + const pathInfo = this.configPath !== void 0 && this.configPath !== null && this.configPath.length > 0 ? ` (${this.configPath})` : '' + return `${this.name}${pathInfo}:\n${this.formattedErrors}` + } +} + +/** + * Error thrown when path resolution fails. + */ +export class ConfigPathError extends ConfigError { + readonly path: string + + constructor(configPath: string, path: string, reason: string) { + super(`Path resolution failed for "${path}": ${reason}`, configPath) + this.name = 'ConfigPathError' + this.path = path + + if (Error.captureStackTrace !== void 0 && Error.captureStackTrace !== null) Error.captureStackTrace(this, ConfigPathError) + } +} + +/** + * Error thrown when the configuration file cannot be read due to permissions. + */ +export class ConfigPermissionError extends ConfigError { + readonly originalError: Error + + constructor(configPath: string, originalError: Error) { + super(`Cannot read configuration file: ${originalError.message}`, configPath) + this.name = 'ConfigPermissionError' + this.originalError = originalError + + if (Error.captureStackTrace !== void 0 && Error.captureStackTrace !== null) Error.captureStackTrace(this, ConfigPermissionError) + } +} + +/** + * Type guard to check if an error is a ConfigError. + * + * @param error - The error to check + * @returns True if the error is a ConfigError + */ +export function isConfigError(error: unknown): error is ConfigError { + return error instanceof ConfigError +} + +/** + * Type guard to check if an error is a ConfigFileNotFoundError. + * + * @param error - The error to check + * @returns True if the error is a ConfigFileNotFoundError + */ +export function isConfigFileNotFoundError(error: unknown): error is ConfigFileNotFoundError { + return error instanceof ConfigFileNotFoundError +} + +/** + * Type guard to check if an error is a ConfigParseError. + * + * @param error - The error to check + * @returns True if the error is a ConfigParseError + */ +export function isConfigParseError(error: unknown): error is ConfigParseError { + return error instanceof ConfigParseError +} + +/** + * Type guard to check if an error is a ConfigValidationError. + * + * @param error - The error to check + * @returns True if the error is a ConfigValidationError + */ +export function isConfigValidationError(error: unknown): error is ConfigValidationError { + return error instanceof ConfigValidationError +} + +/** + * Format any error into a user-friendly message. + * + * @param error - The error to format + * @returns A formatted error message + */ +export function formatConfigError(error: unknown): string { + if (isConfigError(error)) return error.toString() + + if (error instanceof Error) return `Error: ${error.message}` + + return `Unknown error: ${String(error)}` +} diff --git a/cli/src/config/example.json b/cli/src/config/example.json new file mode 100644 index 00000000..2bd83bdb --- /dev/null +++ b/cli/src/config/example.json @@ -0,0 +1,50 @@ +{ + "version": "2026.10218.12101", + "workspaceDir": "~/project", + "aindex": { + "name": "aindex", + "skills": { + "src": "skills", + "dist": "dist/skills" + }, + "commands": { + "src": "commands", + "dist": "dist/commands" + }, + "subAgents": { + "src": "agents", + "dist": "dist/agents" + }, + "rules": { + "src": "rules", + "dist": "dist/rules" + }, + "globalPrompt": { + "src": "app/global.cn.mdx", + "dist": "dist/global.mdx" + }, + "workspacePrompt": { + "src": "app/workspace.cn.mdx", + "dist": "dist/workspace.mdx" + }, + "app": { + "src": "app", + "dist": "dist/app" + }, + "ext": { + "src": "ext", + "dist": "dist/ext" + }, + "arch": { + "src": "arch", + "dist": "dist/arch" + } + }, + "logLevel": "info", + "profile": { + "name": "赵日天", + "username": "TrueNine", + "gender": "male", + "birthday": "1997-11-04" + } +} diff --git a/cli/src/config/index.ts b/cli/src/config/index.ts new file mode 100644 index 00000000..63a8efc6 --- /dev/null +++ b/cli/src/config/index.ts @@ -0,0 +1,86 @@ +export { // Export accessor functions + getAbsoluteWorkspaceDirPath, + getAindexConfig, + getAllResolvedAindexPaths, + getAppPaths, + getArchPaths, + getCommandsPaths, + getConfig, + getExtPaths, + getGlobalPromptPaths, + getLogLevel, + getAindexModulePaths as getModulePaths, + getProfile, + getResolvedAindexModulePaths, + getRulesPaths, + getSkillsPaths, + getSubAgentsPaths, + getVersion, + getWorkspaceDir, + getWorkspacePromptPaths, + isConfigLoaded, + reloadConfig +} from './accessors' + +export { // Export configuration service + ConfigService, + DEFAULT_CONFIG_FILE_NAME, + DEFAULT_GLOBAL_CONFIG_DIR, + getConfigService, + getDefaultConfigPath, + loadConfig, + safeLoadConfig +} from './ConfigService' + +export { // Export error classes + ConfigError, + ConfigFileNotFoundError, + ConfigParseError, + ConfigPathError, + ConfigPermissionError, + ConfigValidationError, + formatConfigError, + isConfigError, + isConfigFileNotFoundError, + isConfigParseError, + isConfigValidationError +} from './errors' + +export { // Export path resolution utilities + clearPathCache, + expandHomeDir, + getAbsoluteDistPath, + getAbsoluteSrcPath, + getAbsoluteWorkspaceDir, + getAindexModulePaths, + getRelativePath, + isAbsolutePath, + joinPath, + normalizePath, + resolveAllAindexPaths, + resolveModulePaths, + resolveWorkspacePath +} from './pathResolver' + +export { // Export schema and validation + formatValidationErrors, + getDefaultConfig, + isValidLogLevel, + safeValidateConfig, + validateConfig, + ZAindexConfig, + ZModulePaths, + ZProfile, + ZTnmscConfig +} from './schema' + +export type { // Export types + AindexConfig, + ConfigLoadResult, + ConfigServiceOptions, + LogLevel, + ModulePaths, + Profile, + ResolvedModulePaths, + TnmscConfig +} from './types' diff --git a/cli/src/config/pathResolver.test.ts b/cli/src/config/pathResolver.test.ts new file mode 100644 index 00000000..17803722 --- /dev/null +++ b/cli/src/config/pathResolver.test.ts @@ -0,0 +1,348 @@ +/** + * Unit tests for pathResolver + */ + +import type {TnmscConfig} from './types' +import * as os from 'node:os' +import * as path from 'node:path' +import {beforeEach, describe, expect, it} from 'vitest' +import { + clearPathCache, + expandHomeDir, + getAbsoluteDistPath, + getAbsoluteSrcPath, + getAbsoluteWorkspaceDir, + getAindexModulePaths, + getRelativePath, + isAbsolutePath, + joinPath, + normalizePath, + resolveAllAindexPaths, + resolveModulePaths, + resolveWorkspacePath +} from './pathResolver' + +describe('pathResolver', () => { + beforeEach(() => clearPathCache()) + + describe('expandHomeDir', () => { + it('should expand ~ to home directory', () => { + const result = expandHomeDir('~/project') + expect(result).toBe(path.join(os.homedir(), 'project')) + }) + + it('should handle ~ alone', () => { + const result = expandHomeDir('~') + expect(result).toBe(os.homedir()) + }) + + it('should not modify paths without ~', () => { + const absolutePath = '/some/absolute/path' + const result = expandHomeDir(absolutePath) + expect(result).toBe(absolutePath) + }) + + it('should handle Windows-style home paths', () => { + const result = expandHomeDir('~\\project') + expect(result).toBe(path.join(os.homedir(), 'project')) + }) + + it('should return path as-is for ~username syntax', () => { + const result = expandHomeDir('~otheruser/project') + expect(result).toBe('~otheruser/project') + }) + }) + + describe('resolveWorkspacePath', () => { + it('should resolve relative paths', () => { + const result = resolveWorkspacePath('/workspace', 'src/skills') + expect(result).toBe(path.resolve('/workspace', 'src/skills')) + }) + + it('should expand home directory in workspace path', () => { + const result = resolveWorkspacePath('~/project', 'src') + expect(result).toBe(path.resolve(os.homedir(), 'project', 'src')) + }) + + it('should use cache on second call', () => { + const workspaceDir = '/workspace' + const relativePath = 'src/skills' + + const result1 = resolveWorkspacePath(workspaceDir, relativePath) + const result2 = resolveWorkspacePath(workspaceDir, relativePath) + + expect(result1).toBe(result2) + }) + + it('should skip cache when useCache is false', () => { + const workspaceDir = '/workspace' + const relativePath = 'src/skills' + + const result1 = resolveWorkspacePath(workspaceDir, relativePath, false) + const result2 = resolveWorkspacePath(workspaceDir, relativePath, false) + + expect(result1).toBe(result2) + }) // Both should be computed (not from cache) + }) + + describe('getAbsoluteSrcPath', () => { + it('should return absolute source path', () => { + const config: TnmscConfig = { + version: '2026.10218.12101', + workspaceDir: '/workspace', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test', + username: 'test', + gender: 'male', + birthday: '1990-01-01' + } + } + + const result = getAbsoluteSrcPath(config, config.aindex.skills) + expect(result).toBe(path.resolve('/workspace', 'skills')) + }) + }) + + describe('getAbsoluteDistPath', () => { + it('should return absolute distribution path', () => { + const config: TnmscConfig = { + version: '2026.10218.12101', + workspaceDir: '/workspace', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test', + username: 'test', + gender: 'male', + birthday: '1990-01-01' + } + } + + const result = getAbsoluteDistPath(config, config.aindex.skills) + expect(result).toBe(path.resolve('/workspace', 'dist/skills')) + }) + }) + + describe('resolveModulePaths', () => { + it('should return resolved paths for module', () => { + const config: TnmscConfig = { + version: '2026.10218.12101', + workspaceDir: '/workspace', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test', + username: 'test', + gender: 'male', + birthday: '1990-01-01' + } + } + + const result = resolveModulePaths(config, config.aindex.skills) + + expect(result.absoluteSrc).toBe(path.resolve('/workspace', 'skills')) + expect(result.absoluteDist).toBe(path.resolve('/workspace', 'dist/skills')) + expect(result.relativeSrc).toBe('skills') + expect(result.relativeDist).toBe('dist/skills') + }) + }) + + describe('getAbsoluteWorkspaceDir', () => { + it('should expand home directory', () => { + const result = getAbsoluteWorkspaceDir('~/project') + expect(result).toBe(path.join(os.homedir(), 'project')) + }) + + it('should return absolute path as-is', () => { + const result = getAbsoluteWorkspaceDir('/workspace') + expect(result).toBe('/workspace') + }) + }) + + describe('getRelativePath', () => { + it('should return relative path from workspace', () => { + const result = getRelativePath('/workspace', '/workspace/src/skills') + expect(result).toBe(path.normalize('src/skills')) + }) + + it('should expand home directory in workspace', () => { + const result = getRelativePath('~/project', path.join(os.homedir(), 'project', 'src')) + expect(result).toBe('src') + }) + }) + + describe('isAbsolutePath', () => { + it('should return true for absolute paths', () => expect(isAbsolutePath('/absolute/path')).toBe(true)) + + it('should return false for relative paths', () => expect(isAbsolutePath('relative/path')).toBe(false)) + + it('should return false for paths starting with ~', () => expect(isAbsolutePath('~/path')).toBe(false)) + }) + + describe('normalizePath', () => { + it('should normalize path separators', () => { + const result = normalizePath('path//to///file') + expect(result).toBe(path.normalize('path//to///file')) + }) + + it('should resolve . and ..', () => { + const result = normalizePath('/path/to/../file') + expect(result).toBe(path.normalize('/path/to/../file')) + }) + }) + + describe('joinPath', () => { + it('should join path segments', () => { + const result = joinPath('path', 'to', 'file') + expect(result).toBe(path.join('path', 'to', 'file')) + }) + }) + + describe('resolveAllAindexPaths', () => { + it('should resolve all aindex module paths', () => { + const config: TnmscConfig = { + version: '2026.10218.12101', + workspaceDir: '/workspace', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test', + username: 'test', + gender: 'male', + birthday: '1990-01-01' + } + } + + const result = resolveAllAindexPaths(config) + + expect(result.skills.absoluteSrc).toBe(path.resolve('/workspace', 'skills')) + expect(result.commands.absoluteSrc).toBe(path.resolve('/workspace', 'commands')) + expect(result.subAgents.absoluteSrc).toBe(path.resolve('/workspace', 'agents')) + expect(result.rules.absoluteSrc).toBe(path.resolve('/workspace', 'rules')) + expect(result.globalPrompt.absoluteSrc).toBe(path.resolve('/workspace', 'app/global.cn.mdx')) + expect(result.workspacePrompt.absoluteSrc).toBe(path.resolve('/workspace', 'app/workspace.cn.mdx')) + expect(result.app.absoluteSrc).toBe(path.resolve('/workspace', 'app')) + expect(result.ext.absoluteSrc).toBe(path.resolve('/workspace', 'ext')) + expect(result.arch.absoluteSrc).toBe(path.resolve('/workspace', 'arch')) + }) + }) + + describe('getAindexModulePaths', () => { + it('should return resolved paths for valid module', () => { + const config: TnmscConfig = { + version: '2026.10218.12101', + workspaceDir: '/workspace', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test', + username: 'test', + gender: 'male', + birthday: '1990-01-01' + } + } + + const result = getAindexModulePaths(config, 'skills') + + expect(result.absoluteSrc).toBe(path.resolve('/workspace', 'skills')) + expect(result.absoluteDist).toBe(path.resolve('/workspace', 'dist/skills')) + }) + + it('should throw for invalid module name', () => { + const config: TnmscConfig = { + version: '2026.10218.12101', + workspaceDir: '/workspace', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: 'Test', + username: 'test', + gender: 'male', + birthday: '1990-01-01' + } + } + + expect(() => getAindexModulePaths(config, 'invalidModule' as keyof TnmscConfig['aindex'] & string)) // Type assertion to test invalid module name + .toThrow('Invalid aindex module') + }) + }) + + describe('clearPathCache', () => { + it('should clear the path cache', () => { + resolveWorkspacePath('/workspace', 'src/skills') // Populate cache + + clearPathCache() // Clear cache + + const result = resolveWorkspacePath('/workspace', 'src/skills') // Should not throw and should recompute path + expect(result).toBe(path.resolve('/workspace', 'src/skills')) + }) + }) +}) diff --git a/cli/src/config/pathResolver.ts b/cli/src/config/pathResolver.ts new file mode 100644 index 00000000..8fe443ef --- /dev/null +++ b/cli/src/config/pathResolver.ts @@ -0,0 +1,232 @@ +/** + * Path resolution utilities for the TNMSC configuration system. + * + * This module provides functions for resolving paths relative to the + * workspace directory, expanding home directory shortcuts, and caching + * resolved paths for performance. + */ + +import type {ModulePaths, ResolvedModulePaths, TnmscConfig} from './types' +import * as os from 'node:os' +import * as path from 'node:path' +import {ConfigPathError} from './errors' + +/** + * Cache for resolved paths to avoid redundant computations. + */ +const pathCache = new Map() + +/** + * Clear the path cache. + * This should be called when the configuration is reloaded. + */ +export function clearPathCache(): void { + pathCache.clear() +} + +/** + * Get the cache key for a path resolution. + */ +function getCacheKey(workspaceDir: string, relativePath: string): string { + return `${workspaceDir}::${relativePath}` +} + +/** + * Expand the tilde (~) in a path to the user's home directory. + * + * @param inputPath - The path that may contain a tilde + * @returns The path with tilde expanded to the home directory + */ +export function expandHomeDir(inputPath: string): string { + if (!inputPath.startsWith('~')) return inputPath + + const homeDir = os.homedir() + + if (inputPath === '~') return homeDir + + if (inputPath.startsWith('~/') || inputPath.startsWith('~\\')) return path.join(homeDir, inputPath.slice(2)) + + return inputPath // Handle ~username syntax (not supported, return as-is) +} + +/** + * Resolve a path relative to the workspace directory. + * + * @param workspaceDir - The workspace directory (may contain ~) + * @param relativePath - The path relative to the workspace + * @param useCache - Whether to use the path cache + * @returns The absolute resolved path + * @throws {ConfigPathError} If path resolution fails + */ +export function resolveWorkspacePath( + workspaceDir: string, + relativePath: string, + useCache = true +): string { + const cacheKey = getCacheKey(workspaceDir, relativePath) + + if (useCache && pathCache.has(cacheKey)) return pathCache.get(cacheKey)! + + try { + const expandedWorkspace = expandHomeDir(workspaceDir) + const resolvedPath = path.resolve(expandedWorkspace, relativePath) + + if (useCache) pathCache.set(cacheKey, resolvedPath) + + return resolvedPath + } + catch (error) { + const reason = error instanceof Error ? error.message : String(error) + throw new ConfigPathError(workspaceDir, relativePath, reason) + } +} + +/** + * Get the absolute path for a module's source directory. + * + * @param config - The TNMSC configuration + * @param modulePath - The module paths (src/dist pair) + * @returns The absolute source path + */ +export function getAbsoluteSrcPath(config: TnmscConfig, modulePath: ModulePaths): string { + return resolveWorkspacePath(config.workspaceDir, modulePath.src) +} + +/** + * Get the absolute path for a module's distribution directory. + * + * @param config - The TNMSC configuration + * @param modulePath - The module paths (src/dist pair) + * @returns The absolute distribution path + */ +export function getAbsoluteDistPath(config: TnmscConfig, modulePath: ModulePaths): string { + return resolveWorkspacePath(config.workspaceDir, modulePath.dist) +} + +/** + * Get both absolute and relative paths for a module. + * + * @param config - The TNMSC configuration + * @param modulePath - The module paths (src/dist pair) + * @returns Resolved paths with both absolute and relative variants + */ +export function resolveModulePaths( + config: TnmscConfig, + modulePath: ModulePaths +): ResolvedModulePaths { + return { + absoluteSrc: getAbsoluteSrcPath(config, modulePath), + absoluteDist: getAbsoluteDistPath(config, modulePath), + relativeSrc: modulePath.src, + relativeDist: modulePath.dist + } +} + +/** + * Get the absolute workspace directory path. + * + * @param workspaceDir - The workspace directory (may contain ~) + * @returns The absolute workspace directory path + */ +export function getAbsoluteWorkspaceDir(workspaceDir: string): string { + return expandHomeDir(workspaceDir) +} + +/** + * Get the relative path from the workspace directory. + * + * @param workspaceDir - The workspace directory (may contain ~) + * @param absolutePath - The absolute path to make relative + * @returns The relative path from workspace + */ +export function getRelativePath(workspaceDir: string, absolutePath: string): string { + const expandedWorkspace = expandHomeDir(workspaceDir) + return path.relative(expandedWorkspace, absolutePath) +} + +/** + * Check if a path is absolute. + * + * @param inputPath - The path to check + * @returns True if the path is absolute + */ +export function isAbsolutePath(inputPath: string): boolean { + return path.isAbsolute(inputPath) +} + +/** + * Normalize a path for the current platform. + * + * @param inputPath - The path to normalize + * @returns The normalized path + */ +export function normalizePath(inputPath: string): string { + return path.normalize(inputPath) +} + +/** + * Join multiple path segments. + * + * @param segments - The path segments to join + * @returns The joined path + */ +export function joinPath(...segments: string[]): string { + return path.join(...segments) +} + +/** + * Get all resolved paths for the aindex configuration. + * + * @param config - The TNMSC configuration + * @returns Object with all module paths resolved + */ +export function resolveAllAindexPaths(config: TnmscConfig): { + skills: ResolvedModulePaths + commands: ResolvedModulePaths + subAgents: ResolvedModulePaths + rules: ResolvedModulePaths + globalPrompt: ResolvedModulePaths + workspacePrompt: ResolvedModulePaths + app: ResolvedModulePaths + ext: ResolvedModulePaths + arch: ResolvedModulePaths +} { + const {aindex} = config + + return { + skills: resolveModulePaths(config, aindex.skills), + commands: resolveModulePaths(config, aindex.commands), + subAgents: resolveModulePaths(config, aindex.subAgents), + rules: resolveModulePaths(config, aindex.rules), + globalPrompt: resolveModulePaths(config, aindex.globalPrompt), + workspacePrompt: resolveModulePaths(config, aindex.workspacePrompt), + app: resolveModulePaths(config, aindex.app), + ext: resolveModulePaths(config, aindex.ext), + arch: resolveModulePaths(config, aindex.arch) + } +} + +/** + * Get a specific aindex module's resolved paths. + * + * @param config - The TNMSC configuration + * @param moduleName - The name of the module + * @returns The resolved module paths + * @throws {ConfigPathError} If the module name is invalid + */ +export function getAindexModulePaths( + config: TnmscConfig, + moduleName: keyof TnmscConfig['aindex'] & string +): ResolvedModulePaths { + const modulePaths = config.aindex[moduleName] + + if (modulePaths === void 0 || modulePaths === null || typeof modulePaths !== 'object' || !('src' in modulePaths)) { + throw new ConfigPathError( + config.workspaceDir, + moduleName, + `Invalid aindex module: ${moduleName}` + ) + } + + return resolveModulePaths(config, modulePaths) +} diff --git a/cli/src/config/schema.test.ts b/cli/src/config/schema.test.ts new file mode 100644 index 00000000..e9899a05 --- /dev/null +++ b/cli/src/config/schema.test.ts @@ -0,0 +1,293 @@ +/** + * Unit tests for schema validation + */ + +import type {TnmscConfig} from './types' +import {describe, expect, it} from 'vitest' +import { + formatValidationErrors, + getDefaultConfig, + isValidLogLevel, + safeValidateConfig, + validateConfig, + ZAindexConfig, + ZModulePaths, + ZProfile, + ZTnmscConfig +} from './schema' + +describe('schema validation', () => { + const validConfig: TnmscConfig = { + version: '2026.10218.12101', + workspaceDir: '~/project', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + logLevel: 'info', + profile: { + name: '赵日天', + username: 'TrueNine', + gender: 'male', + birthday: '1997-11-04' + } + } + + describe('zModulePaths', () => { + it('should validate valid module paths', () => { + const result = ZModulePaths.safeParse({src: 'skills', dist: 'dist/skills'}) + expect(result.success).toBe(true) + }) + + it('should reject empty src path', () => { + const result = ZModulePaths.safeParse({src: '', dist: 'dist/skills'}) + expect(result.success).toBe(false) + }) + + it('should reject empty dist path', () => { + const result = ZModulePaths.safeParse({src: 'skills', dist: ''}) + expect(result.success).toBe(false) + }) + + it('should reject missing src', () => { + const result = ZModulePaths.safeParse({dist: 'dist/skills'}) + expect(result.success).toBe(false) + }) + + it('should reject missing dist', () => { + const result = ZModulePaths.safeParse({src: 'skills'}) + expect(result.success).toBe(false) + }) + }) + + describe('zAindexConfig', () => { + it('should validate valid aindex config', () => { + const result = ZAindexConfig.safeParse(validConfig.aindex) + expect(result.success).toBe(true) + }) + + it('should reject empty name', () => { + const invalidConfig = { + ...validConfig.aindex, + name: '' + } + const result = ZAindexConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + + it('should reject missing skills', () => { + const {skills: _, ...invalidConfig} = validConfig.aindex + const result = ZAindexConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + + it('should reject invalid skills paths', () => { + const invalidConfig = { + ...validConfig.aindex, + skills: {src: '', dist: 'dist/skills'} + } + const result = ZAindexConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + }) + + describe('zProfile', () => { + it('should validate valid profile', () => { + const result = ZProfile.safeParse(validConfig.profile) + expect(result.success).toBe(true) + }) + + it('should reject empty name', () => { + const invalidProfile = {...validConfig.profile, name: ''} + const result = ZProfile.safeParse(invalidProfile) + expect(result.success).toBe(false) + }) + + it('should reject empty username', () => { + const invalidProfile = {...validConfig.profile, username: ''} + const result = ZProfile.safeParse(invalidProfile) + expect(result.success).toBe(false) + }) + + it('should reject empty gender', () => { + const invalidProfile = {...validConfig.profile, gender: ''} + const result = ZProfile.safeParse(invalidProfile) + expect(result.success).toBe(false) + }) + + it('should reject invalid birthday format', () => { + const invalidProfile = {...validConfig.profile, birthday: '1997/11/04'} + const result = ZProfile.safeParse(invalidProfile) + expect(result.success).toBe(false) + }) + + it('should reject birthday without leading zeros', () => { + const invalidProfile = {...validConfig.profile, birthday: '1997-1-4'} + const result = ZProfile.safeParse(invalidProfile) + expect(result.success).toBe(false) + }) + }) + + describe('zTnmscConfig', () => { + it('should validate valid configuration', () => { + const result = ZTnmscConfig.safeParse(validConfig) + expect(result.success).toBe(true) + }) + + it('should reject missing version', () => { + const {version: _, ...invalidConfig} = validConfig + const result = ZTnmscConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + + it('should reject missing workspaceDir', () => { + const {workspaceDir: _, ...invalidConfig} = validConfig + const result = ZTnmscConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + + it('should reject missing aindex', () => { + const {aindex: _, ...invalidConfig} = validConfig + const result = ZTnmscConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + + it('should reject missing logLevel', () => { + const {logLevel: _, ...invalidConfig} = validConfig + const result = ZTnmscConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + + it('should reject missing profile', () => { + const {profile: _, ...invalidConfig} = validConfig + const result = ZTnmscConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + + it('should reject invalid version format', () => { + const invalidConfig = {...validConfig, version: '1.0.0'} + const result = ZTnmscConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + + it('should reject version without dots', () => { + const invalidConfig = {...validConfig, version: '20261021812101'} + const result = ZTnmscConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + + it('should reject empty workspaceDir', () => { + const invalidConfig = {...validConfig, workspaceDir: ''} + const result = ZTnmscConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + + it('should reject invalid logLevel', () => { + const invalidConfig = {...validConfig, logLevel: 'verbose'} + const result = ZTnmscConfig.safeParse(invalidConfig) + expect(result.success).toBe(false) + }) + + it('should accept all valid log levels', () => { + const validLevels = ['trace', 'debug', 'info', 'warn', 'error'] as const + for (const level of validLevels) { + const testConfig = {...validConfig, logLevel: level} + const result = ZTnmscConfig.safeParse(testConfig) + expect(result.success).toBe(true) + } + }) + }) + + describe('validateConfig', () => { + it('should return validated config for valid input', () => { + const result = validateConfig(validConfig) + expect(result.version).toBe('2026.10218.12101') + expect(result.workspaceDir).toBe('~/project') + }) + + it('should throw for invalid config', () => { + expect(() => validateConfig({})).toThrow() + }) + }) + + describe('safeValidateConfig', () => { + it('should return success for valid config', () => { + const result = safeValidateConfig(validConfig) + expect(result.success).toBe(true) + if (result.success) expect(result.data.version).toBe('2026.10218.12101') + }) + + it('should return failure for invalid config', () => { + const result = safeValidateConfig({}) + expect(result.success).toBe(false) + if (!result.success) expect(result.error).toBeDefined() + }) + }) + + describe('formatValidationErrors', () => { + it('should format validation errors', () => { + const result = safeValidateConfig({}) + expect(result.success).toBe(false) + + if (result.success) return + + const formatted = formatValidationErrors(result.error) + expect(formatted.length).toBeGreaterThan(0) + expect(formatted[0]).toContain(':') + }) + }) + + describe('isValidLogLevel', () => { + it('should return true for valid log levels', () => { + expect(isValidLogLevel('trace')).toBe(true) + expect(isValidLogLevel('debug')).toBe(true) + expect(isValidLogLevel('info')).toBe(true) + expect(isValidLogLevel('warn')).toBe(true) + expect(isValidLogLevel('error')).toBe(true) + }) + + it('should return false for invalid log levels', () => { + expect(isValidLogLevel('verbose')).toBe(false) + expect(isValidLogLevel('warning')).toBe(false) + expect(isValidLogLevel('')).toBe(false) + expect(isValidLogLevel(null)).toBe(false) + expect(isValidLogLevel(void 0)).toBe(false) + expect(isValidLogLevel(123)).toBe(false) + }) + }) + + describe('getDefaultConfig', () => { + it('should return default configuration', () => { + const defaults = getDefaultConfig() + expect(defaults.version).toBe('2026.00000.00000') + expect(defaults.workspaceDir).toBe('~/project') + expect(defaults.logLevel).toBe('info') + expect(defaults.aindex).toBeDefined() + expect(defaults.aindex?.name).toBe('aindex') + expect(defaults.profile).toBeDefined() + }) + + it('should have all aindex modules in default config', () => { + const defaults = getDefaultConfig() + const aindex = defaults.aindex! + + expect(aindex.skills).toEqual({src: 'skills', dist: 'dist/skills'}) + expect(aindex.commands).toEqual({src: 'commands', dist: 'dist/commands'}) + expect(aindex.subAgents).toEqual({src: 'agents', dist: 'dist/agents'}) + expect(aindex.rules).toEqual({src: 'rules', dist: 'dist/rules'}) + expect(aindex.globalPrompt).toEqual({src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}) + expect(aindex.workspacePrompt).toEqual({src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}) + expect(aindex.app).toEqual({src: 'app', dist: 'dist/app'}) + expect(aindex.ext).toEqual({src: 'ext', dist: 'dist/ext'}) + expect(aindex.arch).toEqual({src: 'arch', dist: 'dist/arch'}) + }) + }) +}) diff --git a/cli/src/config/schema.ts b/cli/src/config/schema.ts new file mode 100644 index 00000000..985cfb89 --- /dev/null +++ b/cli/src/config/schema.ts @@ -0,0 +1,158 @@ +/** + * Zod validation schemas for the TNMSC configuration system. + * + * This module provides runtime validation for configuration files, + * ensuring all required fields exist and have valid formats. + */ + +import type { + AindexConfig, + LogLevel, + ModulePaths, + Profile, + TnmscConfig +} from './types' +import {z} from 'zod/v3' + +const VERSION_REGEX = /^\d{4}\.\d{5}\.\d{5}$/ + +const BIRTHDAY_REGEX = /^\d{4}-\d{2}-\d{2}$/ + +/** + * Valid log level values. + */ +const VALID_LOG_LEVELS: Set = new Set(['trace', 'debug', 'info', 'warn', 'error']) + +/** + * Zod schema for module path pairs (src/dist). + */ +export const ZModulePaths = z.object({ + src: z.string().min(1, 'Source path cannot be empty'), + dist: z.string().min(1, 'Distribution path cannot be empty') +}) satisfies z.ZodType + +/** + * Zod schema for aindex configuration. + */ +export const ZAindexConfig = z.object({ + name: z.string().min(1, 'Aindex name cannot be empty'), + skills: ZModulePaths, + commands: ZModulePaths, + subAgents: ZModulePaths, + rules: ZModulePaths, + globalPrompt: ZModulePaths, + workspacePrompt: ZModulePaths, + app: ZModulePaths, + ext: ZModulePaths, + arch: ZModulePaths +}) satisfies z.ZodType + +/** + * Zod schema for user profile. + */ +export const ZProfile = z.object({ + name: z.string().min(1, 'Profile name cannot be empty'), + username: z.string().min(1, 'Username cannot be empty'), + gender: z.string().min(1, 'Gender cannot be empty'), + birthday: z.string() + .regex(BIRTHDAY_REGEX, 'Birthday must be in YYYY-MM-DD format') +}) satisfies z.ZodType + +/** + * Zod schema for the main TNMSC configuration. + */ +export const ZTnmscConfig = z.object({ + version: z.string() + .regex(VERSION_REGEX, 'Version must be in YYYY.MMDD.HHMM format'), + workspaceDir: z.string().min(1, 'Workspace directory cannot be empty'), + aindex: ZAindexConfig, + logLevel: z.enum(['trace', 'debug', 'info', 'warn', 'error']), + profile: ZProfile +}) satisfies z.ZodType + +/** + * Validate a configuration object against the schema. + * + * @param config - The configuration object to validate + * @returns The validated configuration + * @throws {z.ZodError} If validation fails + */ +export function validateConfig(config: unknown): TnmscConfig { + return ZTnmscConfig.parse(config) +} + +/** + * Safely validate a configuration object against the schema. + * + * @param config - The configuration object to validate + * @returns An object with success flag and either data or error + */ +export function safeValidateConfig(config: unknown): + | {success: true, data: TnmscConfig} + | {success: false, error: z.ZodError} { + const result = ZTnmscConfig.safeParse(config) + if (result.success) return {success: true, data: result.data} + return {success: false, error: result.error} +} + +/** + * Format validation errors into human-readable messages. + * + * @param error - The Zod error to format + * @returns Array of error message strings + */ +export function formatValidationErrors(error: z.ZodError): string[] { + return error.issues.map(issue => { + const path = issue.path.length > 0 ? issue.path.join('.') : 'root' + return `${path}: ${issue.message}` + }) +} + +/** + * Check if a value is a valid log level. + * + * @param value - The value to check + * @returns True if the value is a valid log level + */ +export function isValidLogLevel(value: unknown): value is LogLevel { + return typeof value === 'string' && VALID_LOG_LEVELS.has(value as LogLevel) +} + +/** + * Get the default configuration values. + * + * @returns A partial configuration with default values + */ +export function getDefaultConfig(): Partial { + return { + version: '2026.00000.00000', + workspaceDir: '~/project', + logLevel: 'info', + aindex: { + name: 'aindex', + skills: {src: 'skills', dist: 'dist/skills'}, + commands: {src: 'commands', dist: 'dist/commands'}, + subAgents: {src: 'agents', dist: 'dist/agents'}, + rules: {src: 'rules', dist: 'dist/rules'}, + globalPrompt: {src: 'app/global.cn.mdx', dist: 'dist/global.mdx'}, + workspacePrompt: {src: 'app/workspace.cn.mdx', dist: 'dist/workspace.mdx'}, + app: {src: 'app', dist: 'dist/app'}, + ext: {src: 'ext', dist: 'dist/ext'}, + arch: {src: 'arch', dist: 'dist/arch'} + }, + profile: { + name: '', + username: '', + gender: '', + birthday: '' + } + } +} + +export { // Re-export types for convenience + type AindexConfig, + type LogLevel, + type ModulePaths, + type Profile, + type TnmscConfig +} from './types' diff --git a/cli/src/config/types.ts b/cli/src/config/types.ts new file mode 100644 index 00000000..fdafd828 --- /dev/null +++ b/cli/src/config/types.ts @@ -0,0 +1,114 @@ +/** + * Configuration types for the TNMSC configuration system. + * + * This module defines TypeScript interfaces that match the exact JSON + * configuration structure located at ~/.aindex/.tnmsc.json + */ + +/** + * Module path pair containing source and distribution paths. + * Both paths are relative to the workspace directory. + */ +export interface ModulePaths { + /** Source path (human-authored files) */ + readonly src: string + /** Output/compiled path (read by the system) */ + readonly dist: string +} + +/** + * Aindex configuration containing all module paths. + * This replaces the previous shadowSourceProject configuration. + */ +export interface AindexConfig { + /** Name of the aindex configuration */ + readonly name: string + /** Skills module paths */ + readonly skills: ModulePaths + /** Commands module paths */ + readonly commands: ModulePaths + /** Sub-agents module paths */ + readonly subAgents: ModulePaths + /** Rules module paths */ + readonly rules: ModulePaths + /** Global prompt file paths */ + readonly globalPrompt: ModulePaths + /** Workspace prompt file paths */ + readonly workspacePrompt: ModulePaths + /** Application module paths */ + readonly app: ModulePaths + /** Extension module paths */ + readonly ext: ModulePaths + /** Architecture module paths */ + readonly arch: ModulePaths +} + +/** + * User profile information. + */ +export interface Profile { + /** Display name of the user */ + readonly name: string + /** Username/login identifier */ + readonly username: string + /** Gender of the user */ + readonly gender: string + readonly birthday: string +} + +/** + * Log level options for the application. + */ +export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' + +/** + * Main TNMSC configuration interface. + * This matches the structure of ~/.aindex/.tnmsc.json + */ +export interface TnmscConfig { + readonly version: string + /** Workspace directory path (supports ~ for home directory) */ + readonly workspaceDir: string + /** Aindex module configuration */ + readonly aindex: AindexConfig + /** Log level setting */ + readonly logLevel: LogLevel + /** User profile information */ + readonly profile: Profile +} + +/** + * Configuration load result containing the config and metadata. + */ +export interface ConfigLoadResult { + /** The loaded configuration */ + readonly config: TnmscConfig + /** Path to the configuration file */ + readonly source: string + /** Whether the configuration was found and loaded */ + readonly found: boolean +} + +/** + * Configuration service options. + */ +export interface ConfigServiceOptions { + /** Custom path to the configuration file */ + readonly configPath?: string + /** Whether to cache the configuration after loading */ + readonly enableCache?: boolean +} + +/** + * Resolved paths for an aindex module. + */ +export interface ResolvedModulePaths { + /** Absolute source path */ + readonly absoluteSrc: string + /** Absolute distribution path */ + readonly absoluteDist: string + /** Source path relative to workspace */ + readonly relativeSrc: string + /** Distribution path relative to workspace */ + readonly relativeDist: string +} diff --git a/cli/src/plugin-runtime.ts b/cli/src/plugin-runtime.ts index 9182f7c5..b8c2e967 100644 --- a/cli/src/plugin-runtime.ts +++ b/cli/src/plugin-runtime.ts @@ -16,7 +16,7 @@ import * as fs from 'node:fs' import * as path from 'node:path' import process from 'node:process' import {createLogger, setGlobalLogLevel} from '@truenine/plugin-shared' -import * as glob from 'fast-glob' +import glob from 'fast-glob' import { CleanCommand, DryRunCleanCommand, diff --git a/cli/src/plugin.config.ts b/cli/src/plugin.config.ts index 4dfaeb01..1657877d 100644 --- a/cli/src/plugin.config.ts +++ b/cli/src/plugin.config.ts @@ -27,7 +27,6 @@ import {VSCodeConfigInputPlugin} from '@truenine/plugin-input-vscode-config' import {WorkspaceInputPlugin} from '@truenine/plugin-input-workspace' import {JetBrainsAIAssistantCodexOutputPlugin} from '@truenine/plugin-jetbrains-ai-codex' import {JetBrainsIDECodeStyleConfigOutputPlugin} from '@truenine/plugin-jetbrains-codestyle' -import {KiroCLIOutputPlugin} from '@truenine/plugin-kiro-ide' import {CodexCLIOutputPlugin} from '@truenine/plugin-openai-codex-cli' import {OpencodeCLIOutputPlugin} from '@truenine/plugin-opencode-cli' import {QoderIDEPluginOutputPlugin} from '@truenine/plugin-qoder-ide' @@ -48,7 +47,6 @@ export default defineConfig({ new DroidCLIOutputPlugin(), new GeminiCLIOutputPlugin(), new GenericSkillsOutputPlugin(), - new KiroCLIOutputPlugin(), new OpencodeCLIOutputPlugin(), new QoderIDEPluginOutputPlugin(), new TraeIDEOutputPlugin(), diff --git a/packages/desk-paths/src/index.property.test.ts b/cli/src/plugins/desk-paths/index.property.test.ts similarity index 100% rename from packages/desk-paths/src/index.property.test.ts rename to cli/src/plugins/desk-paths/index.property.test.ts diff --git a/packages/desk-paths/src/index.ts b/cli/src/plugins/desk-paths/index.ts similarity index 100% rename from packages/desk-paths/src/index.ts rename to cli/src/plugins/desk-paths/index.ts diff --git a/packages/plugin-agentskills-compact/src/GenericSkillsOutputPlugin.test.ts b/cli/src/plugins/plugin-agentskills-compact/GenericSkillsOutputPlugin.test.ts similarity index 76% rename from packages/plugin-agentskills-compact/src/GenericSkillsOutputPlugin.test.ts rename to cli/src/plugins/plugin-agentskills-compact/GenericSkillsOutputPlugin.test.ts index f09ed44c..44115776 100644 --- a/packages/plugin-agentskills-compact/src/GenericSkillsOutputPlugin.test.ts +++ b/cli/src/plugins/plugin-agentskills-compact/GenericSkillsOutputPlugin.test.ts @@ -192,7 +192,7 @@ describe('genericSkillsOutputPlugin', () => { }) describe('registerProjectOutputDirs', () => { - it('should register .skills directory for each project', async () => { + it('should register both .agents/skills and legacy .skills directories for each project', async () => { const ctx = createMockOutputPluginContext({ workspace: { directory: createMockRelativePath('.', mockWorkspaceDir), @@ -206,9 +206,11 @@ describe('genericSkillsOutputPlugin', () => { const results = await plugin.registerProjectOutputDirs(ctx) - expect(results).toHaveLength(2) - expect(results[0]?.path).toBe(path.join('project1', '.skills')) - expect(results[1]?.path).toBe(path.join('project2', '.skills')) + expect(results).toHaveLength(4) // Each project should register 2 directories: .agents/skills and .skills + expect(results[0]?.path).toBe(path.join('project1', '.agents', 'skills')) + expect(results[1]?.path).toBe(path.join('project1', '.skills')) + expect(results[2]?.path).toBe(path.join('project2', '.agents', 'skills')) + expect(results[3]?.path).toBe(path.join('project2', '.skills')) }) it('should return empty array when no skills exist', async () => { @@ -225,7 +227,7 @@ describe('genericSkillsOutputPlugin', () => { }) describe('registerGlobalOutputDirs', () => { - it('should register ~/.skills/ directory when skills exist', async () => { + it('should return empty array (no global output dirs)', async () => { const ctx = createMockOutputPluginContext({ workspace: { directory: createMockRelativePath('.', mockWorkspaceDir), @@ -236,28 +238,28 @@ describe('genericSkillsOutputPlugin', () => { const results = await plugin.registerGlobalOutputDirs(ctx) - expect(results).toHaveLength(1) - const pathValue = results[0]?.path.replaceAll('\\', '/') - const expected = path.join('.aindex', '.skills').replaceAll('\\', '/') - expect(pathValue).toBe(expected) - expect(results[0]?.basePath).toBe(mockHomeDir) + expect(results).toHaveLength(0) }) + }) - it('should return empty array when no skills exist', async () => { + describe('registerGlobalOutputFiles', () => { + it('should return empty array (no global output files)', async () => { const ctx = createMockOutputPluginContext({ workspace: { directory: createMockRelativePath('.', mockWorkspaceDir), projects: [{name: 'project1', dirFromWorkspacePath: createMockRelativePath('project1', mockWorkspaceDir)}] - } + }, + skills: [createMockSkillPrompt('test-skill', 'content')] }) - const results = await plugin.registerGlobalOutputDirs(ctx) + const results = await plugin.registerGlobalOutputFiles(ctx) + expect(results).toHaveLength(0) }) }) - describe('registerGlobalOutputFiles', () => { - it('should register SKILL.md in ~/.skills/ for each skill', async () => { + describe('registerProjectOutputFiles', () => { + it('should register skill files for each skill in each project', async () => { const ctx = createMockOutputPluginContext({ workspace: { directory: createMockRelativePath('.', mockWorkspaceDir), @@ -269,12 +271,11 @@ describe('genericSkillsOutputPlugin', () => { ] }) - const results = await plugin.registerGlobalOutputFiles(ctx) + const results = await plugin.registerProjectOutputFiles(ctx) - expect(results).toHaveLength(2) - expect(results[0]?.path).toBe(path.join('.aindex', '.skills', 'skill-a', 'SKILL.md')) - expect(results[1]?.path).toBe(path.join('.aindex', '.skills', 'skill-b', 'SKILL.md')) - expect(results[0]?.basePath).toBe(mockHomeDir) + expect(results).toHaveLength(2) // 2 skills * 1 file each = 2 files + expect(results[0]?.path).toBe(path.join('.agents', 'skills', 'skill-a', 'SKILL.md')) + expect(results[1]?.path).toBe(path.join('.agents', 'skills', 'skill-b', 'SKILL.md')) }) it('should register mcp.json when skill has MCP config', async () => { @@ -286,66 +287,52 @@ describe('genericSkillsOutputPlugin', () => { skills: [createMockSkillPrompt('test-skill', 'content', {mcpConfig: {rawContent: '{}'}})] }) - const results = await plugin.registerGlobalOutputFiles(ctx) + const results = await plugin.registerProjectOutputFiles(ctx) expect(results).toHaveLength(2) - expect(results[0]?.path).toBe(path.join('.aindex', '.skills', 'test-skill', 'SKILL.md')) - expect(results[1]?.path).toBe(path.join('.aindex', '.skills', 'test-skill', 'mcp.json')) + expect(results[0]?.path).toBe(path.join('.agents', 'skills', 'test-skill', 'SKILL.md')) + expect(results[1]?.path).toBe(path.join('.agents', 'skills', 'test-skill', 'mcp.json')) }) - }) - describe('writeGlobalOutputs', () => { - it('should write SKILL.md to ~/.skills/ with front matter', async () => { - const ctx = createMockOutputWriteContext({ + it('should register child docs', async () => { + const ctx = createMockOutputPluginContext({ workspace: { directory: createMockRelativePath('.', mockWorkspaceDir), projects: [{name: 'project1', dirFromWorkspacePath: createMockRelativePath('project1', mockWorkspaceDir)}] }, - skills: [createMockSkillPrompt('test-skill', '# Skill Content', { - description: 'A test skill', - keywords: ['test', 'demo'] + skills: [createMockSkillPrompt('test-skill', 'content', { + childDocs: [{relativePath: 'doc1.mdx', content: 'doc content'}] })] }) - const results = await plugin.writeGlobalOutputs(ctx) - - expect(results.files).toHaveLength(1) - expect(results.files[0]?.success).toBe(true) - - const writeCall = vi.mocked(fs.writeFileSync).mock.calls[0] - expect(writeCall).toBeDefined() - expect(writeCall?.[0]).toContain(path.join(mockHomeDir, '.aindex', '.skills', 'test-skill', 'SKILL.md')) + const results = await plugin.registerProjectOutputFiles(ctx) - const writtenContent = writeCall?.[1] as string - expect(writtenContent).toContain('name: test-skill') - expect(writtenContent).toContain('description: A test skill') - expect(writtenContent).toContain('# Skill Content') + expect(results).toHaveLength(2) + expect(results[0]?.path).toBe(path.join('.agents', 'skills', 'test-skill', 'SKILL.md')) + expect(results[1]?.path).toBe(path.join('.agents', 'skills', 'test-skill', 'doc1.md')) }) - it('should support dry-run mode', async () => { - const ctx = createMockOutputWriteContext( - { - workspace: { - directory: createMockRelativePath('.', mockWorkspaceDir), - projects: [{name: 'project1', dirFromWorkspacePath: createMockRelativePath('project1', mockWorkspaceDir)}] - }, - skills: [createMockSkillPrompt('test-skill', 'content')] + it('should register resources', async () => { + const ctx = createMockOutputPluginContext({ + workspace: { + directory: createMockRelativePath('.', mockWorkspaceDir), + projects: [{name: 'project1', dirFromWorkspacePath: createMockRelativePath('project1', mockWorkspaceDir)}] }, - true - ) + skills: [createMockSkillPrompt('test-skill', 'content', { + resources: [{relativePath: 'resource.json', content: '{}', encoding: 'text'}] + })] + }) - const results = await plugin.writeGlobalOutputs(ctx) + const results = await plugin.registerProjectOutputFiles(ctx) - expect(results.files).toHaveLength(1) - expect(results.files[0]?.success).toBe(true) - expect(results.files[0]?.skipped).toBe(false) - expect(vi.mocked(fs.writeFileSync)).not.toHaveBeenCalled() + expect(results).toHaveLength(2) + expect(results[0]?.path).toBe(path.join('.agents', 'skills', 'test-skill', 'SKILL.md')) + expect(results[1]?.path).toBe(path.join('.agents', 'skills', 'test-skill', 'resource.json')) }) }) describe('writeProjectOutputs', () => { - it('should create symlinks for each skill in each project', async () => { - vi.mocked(fs.existsSync).mockReturnValue(false) // Symlink doesn't exist yet + it('should write skill files directly to project directory', async () => { const ctx = createMockOutputWriteContext({ workspace: { directory: createMockRelativePath('.', mockWorkspaceDir), @@ -359,22 +346,19 @@ describe('genericSkillsOutputPlugin', () => { const results = await plugin.writeProjectOutputs(ctx) - expect(results.files).toHaveLength(2) - expect(vi.mocked(fs.symlinkSync)).toHaveBeenCalledTimes(2) + expect(results.files).toHaveLength(2) // 2 projects * 1 skill = 2 files + expect(results.files[0]?.success).toBe(true) + expect(results.files[1]?.success).toBe(true) - expect(vi.mocked(fs.symlinkSync)).toHaveBeenCalledWith( // Verify symlinks point from project to global - expect.stringContaining(path.join(mockHomeDir, '.aindex', '.skills', 'test-skill')), - expect.stringContaining(path.join('project1', '.skills', 'test-skill')), - expect.anything() - ) - expect(vi.mocked(fs.symlinkSync)).toHaveBeenCalledWith( - expect.stringContaining(path.join(mockHomeDir, '.aindex', '.skills', 'test-skill')), - expect.stringContaining(path.join('project2', '.skills', 'test-skill')), - expect.anything() - ) + expect(vi.mocked(fs.writeFileSync)).toHaveBeenCalled() // Verify files are written (not symlinks created) + expect(vi.mocked(fs.symlinkSync)).not.toHaveBeenCalled() + + const writeCalls = vi.mocked(fs.writeFileSync).mock.calls // Verify correct paths + expect(writeCalls[0]?.[0]).toContain(path.join('project1', '.agents', 'skills', 'test-skill', 'SKILL.md')) + expect(writeCalls[1]?.[0]).toContain(path.join('project2', '.agents', 'skills', 'test-skill', 'SKILL.md')) }) - it('should support dry-run mode for symlinks', async () => { + it('should support dry-run mode', async () => { const ctx = createMockOutputWriteContext( { workspace: { @@ -390,8 +374,7 @@ describe('genericSkillsOutputPlugin', () => { expect(results.files).toHaveLength(1) expect(results.files[0]?.success).toBe(true) - expect(results.files[0]?.skipped).toBe(false) - expect(vi.mocked(fs.symlinkSync)).not.toHaveBeenCalled() + expect(vi.mocked(fs.writeFileSync)).not.toHaveBeenCalled() }) it('should skip project without dirFromWorkspacePath', async () => { @@ -406,7 +389,6 @@ describe('genericSkillsOutputPlugin', () => { const results = await plugin.writeProjectOutputs(ctx) expect(results.files).toHaveLength(0) - expect(vi.mocked(fs.symlinkSync)).not.toHaveBeenCalled() }) it('should return empty results when no skills exist', async () => { @@ -422,26 +404,47 @@ describe('genericSkillsOutputPlugin', () => { expect(results.files).toHaveLength(0) expect(results.dirs).toHaveLength(0) }) + + it('should write skill with front matter', async () => { + const ctx = createMockOutputWriteContext({ + workspace: { + directory: createMockRelativePath('.', mockWorkspaceDir), + projects: [{name: 'project1', dirFromWorkspacePath: createMockRelativePath('project1', mockWorkspaceDir)}] + }, + skills: [createMockSkillPrompt('test-skill', '# Skill Content', { + description: 'A test skill', + keywords: ['test', 'demo'] + })] + }) + + await plugin.writeProjectOutputs(ctx) + + const writeCall = vi.mocked(fs.writeFileSync).mock.calls[0] + expect(writeCall).toBeDefined() + expect(writeCall?.[0]).toContain(path.join('project1', '.agents', 'skills', 'test-skill', 'SKILL.md')) + + const writtenContent = writeCall?.[1] as string + expect(writtenContent).toContain('name: test-skill') + expect(writtenContent).toContain('description: A test skill') + expect(writtenContent).toContain('# Skill Content') + }) }) - describe('registerProjectOutputFiles', () => { - it('should register symlink paths for each skill in each project', async () => { - const ctx = createMockOutputPluginContext({ + describe('writeGlobalOutputs', () => { + it('should return empty results (no global output)', async () => { + const ctx = createMockOutputWriteContext({ workspace: { directory: createMockRelativePath('.', mockWorkspaceDir), projects: [{name: 'project1', dirFromWorkspacePath: createMockRelativePath('project1', mockWorkspaceDir)}] }, - skills: [ - createMockSkillPrompt('skill-a', 'content a'), - createMockSkillPrompt('skill-b', 'content b') - ] + skills: [createMockSkillPrompt('test-skill', 'content')] }) - const results = await plugin.registerProjectOutputFiles(ctx) + const results = await plugin.writeGlobalOutputs(ctx) - expect(results).toHaveLength(2) - expect(results[0]?.path).toBe(path.join('.skills', 'skill-a')) - expect(results[1]?.path).toBe(path.join('.skills', 'skill-b')) + expect(results.files).toHaveLength(0) + expect(results.dirs).toHaveLength(0) + expect(vi.mocked(fs.writeFileSync)).not.toHaveBeenCalled() }) }) }) diff --git a/packages/plugin-agentskills-compact/src/GenericSkillsOutputPlugin.ts b/cli/src/plugins/plugin-agentskills-compact/GenericSkillsOutputPlugin.ts similarity index 62% rename from packages/plugin-agentskills-compact/src/GenericSkillsOutputPlugin.ts rename to cli/src/plugins/plugin-agentskills-compact/GenericSkillsOutputPlugin.ts index 8a53d64e..2899d354 100644 --- a/packages/plugin-agentskills-compact/src/GenericSkillsOutputPlugin.ts +++ b/cli/src/plugins/plugin-agentskills-compact/GenericSkillsOutputPlugin.ts @@ -13,39 +13,36 @@ import {buildMarkdownWithFrontMatter} from '@truenine/md-compiler/markdown' import {AbstractOutputPlugin} from '@truenine/plugin-output-shared' import {FilePathKind} from '@truenine/plugin-shared' -const PROJECT_SKILLS_DIR = '.skills' -const GLOBAL_SKILLS_DIR = '.aindex/.skills' -const OLD_GLOBAL_SKILLS_DIR = '.skills' // 向后兼容:旧的全局 skills 目录 +const PROJECT_SKILLS_DIR = '.agents/skills' +const LEGACY_SKILLS_DIR = '.skills' // 旧路径,用于清理 const SKILL_FILE_NAME = 'SKILL.md' const MCP_CONFIG_FILE = 'mcp.json' /** - * Output plugin that writes skills to a global location (~/.skills/) and - * creates symlinks in each project pointing to the global skill directories. - * - * This approach reduces disk space usage when multiple projects use the same skills. + * Output plugin that writes skills directly to each project's .agents/skills/ directory. * * Structure: - * - Global: ~/.skills//SKILL.md, mcp.json, child docs, resources - * - Project: /.skills/ → ~/.skills/ (symlink) + * - Project: /.agents/skills//SKILL.md, mcp.json, child docs, resources + * + * Also cleans up legacy .skills/ directories from previous versions. */ export class GenericSkillsOutputPlugin extends AbstractOutputPlugin { constructor() { - super('GenericSkillsOutputPlugin', {globalConfigDir: GLOBAL_SKILLS_DIR, outputFileName: SKILL_FILE_NAME}) + super('GenericSkillsOutputPlugin', {outputFileName: SKILL_FILE_NAME}) this.registerCleanEffect('legacy-global-skills-cleanup', async ctx => { // 向后兼容:clean 时清理旧的 ~/.skills 目录 - const oldGlobalSkillsDir = this.joinPath(this.getHomeDir(), OLD_GLOBAL_SKILLS_DIR) - if (!this.existsSync(oldGlobalSkillsDir)) return {success: true, description: 'Legacy global skills dir does not exist, nothing to clean'} + const legacyGlobalSkillsDir = this.joinPath(this.getHomeDir(), LEGACY_SKILLS_DIR) + if (!this.existsSync(legacyGlobalSkillsDir)) return {success: true, description: 'Legacy global skills dir does not exist, nothing to clean'} if (ctx.dryRun === true) { - this.log.trace({action: 'dryRun', type: 'legacyCleanup', path: oldGlobalSkillsDir}) - return {success: true, description: `Would clean legacy global skills dir: ${oldGlobalSkillsDir}`} + this.log.trace({action: 'dryRun', type: 'legacyCleanup', path: legacyGlobalSkillsDir}) + return {success: true, description: `Would clean legacy global skills dir: ${legacyGlobalSkillsDir}`} } try { - const entries = this.readdirSync(oldGlobalSkillsDir, {withFileTypes: true}) // 只删除 skill 子目录(避免误删用户其他文件) + const entries = this.readdirSync(legacyGlobalSkillsDir, {withFileTypes: true}) // 只删除 skill 子目录(避免误删用户其他文件) let cleanedCount = 0 for (const entry of entries) { if (entry.isDirectory()) { - const skillDir = this.joinPath(oldGlobalSkillsDir, entry.name) + const skillDir = this.joinPath(legacyGlobalSkillsDir, entry.name) const skillFile = this.joinPath(skillDir, SKILL_FILE_NAME) if (this.existsSync(skillFile)) { // 确认是 skill 目录(包含 SKILL.md)才删除 fs.rmSync(skillDir, {recursive: true}) @@ -53,23 +50,19 @@ export class GenericSkillsOutputPlugin extends AbstractOutputPlugin { } } } - const remainingEntries = this.readdirSync(oldGlobalSkillsDir) // 如果目录为空则删除目录本身 - if (remainingEntries.length === 0) fs.rmdirSync(oldGlobalSkillsDir) - this.log.trace({action: 'clean', type: 'legacySkills', dir: oldGlobalSkillsDir, cleanedCount}) - return {success: true, description: `Cleaned ${cleanedCount} legacy skills from ${oldGlobalSkillsDir}`} + const remainingEntries = this.readdirSync(legacyGlobalSkillsDir) // 如果目录为空则删除目录本身 + if (remainingEntries.length === 0) fs.rmdirSync(legacyGlobalSkillsDir) + this.log.trace({action: 'clean', type: 'legacySkills', dir: legacyGlobalSkillsDir, cleanedCount}) + return {success: true, description: `Cleaned ${cleanedCount} legacy skills from ${legacyGlobalSkillsDir}`} } catch (error) { const errMsg = error instanceof Error ? error.message : String(error) - this.log.error({action: 'clean', type: 'legacySkills', dir: oldGlobalSkillsDir, error: errMsg}) + this.log.error({action: 'clean', type: 'legacySkills', dir: legacyGlobalSkillsDir, error: errMsg}) return {success: false, description: `Failed to clean legacy skills dir`, error: error as Error} } }) } - private getGlobalSkillsDir(): string { - return this.joinPath(this.getHomeDir(), GLOBAL_SKILLS_DIR) - } - async registerProjectOutputDirs(ctx: OutputPluginContext): Promise { const results: RelativePath[] = [] const {projects} = ctx.collectedInputContext.workspace @@ -77,10 +70,10 @@ export class GenericSkillsOutputPlugin extends AbstractOutputPlugin { if (skills == null || skills.length === 0) return results - for (const project of projects) { // Register /.skills/ for cleanup (symlink directory) + for (const project of projects) { if (project.dirFromWorkspacePath == null) continue - const skillsDir = this.joinPath(project.dirFromWorkspacePath.path, PROJECT_SKILLS_DIR) + const skillsDir = this.joinPath(project.dirFromWorkspacePath.path, PROJECT_SKILLS_DIR) // 注册新的 .agents/skills/ 目录 results.push({ pathKind: FilePathKind.Relative, path: skillsDir, @@ -88,6 +81,15 @@ export class GenericSkillsOutputPlugin extends AbstractOutputPlugin { getDirectoryName: () => PROJECT_SKILLS_DIR, getAbsolutePath: () => this.joinPath(project.dirFromWorkspacePath!.basePath, skillsDir) }) + + const legacySkillsDir = this.joinPath(project.dirFromWorkspacePath.path, LEGACY_SKILLS_DIR) // 注册旧的 .skills/ 目录用于清理 + results.push({ + pathKind: FilePathKind.Relative, + path: legacySkillsDir, + basePath: project.dirFromWorkspacePath.basePath, + getDirectoryName: () => LEGACY_SKILLS_DIR, + getAbsolutePath: () => this.joinPath(project.dirFromWorkspacePath!.basePath, legacySkillsDir) + }) } return results @@ -100,95 +102,60 @@ export class GenericSkillsOutputPlugin extends AbstractOutputPlugin { if (skills == null || skills.length === 0) return results - for (const project of projects) { // Register symlink paths (skills in project are now symlinks) + for (const project of projects) { if (project.dirFromWorkspacePath == null) continue - const projectSkillsDir = this.joinPath(project.dirFromWorkspacePath.basePath, project.dirFromWorkspacePath.path, PROJECT_SKILLS_DIR) + const projectSkillsDir = this.joinPath( + project.dirFromWorkspacePath.basePath, + project.dirFromWorkspacePath.path, + PROJECT_SKILLS_DIR + ) for (const skill of skills) { const skillName = skill.yamlFrontMatter.name const skillDir = this.joinPath(projectSkillsDir, skillName) - results.push({ // Register skill directory symlink + results.push({ // 注册 SKILL.md pathKind: FilePathKind.Relative, - path: this.joinPath(PROJECT_SKILLS_DIR, skillName), + path: this.joinPath(PROJECT_SKILLS_DIR, skillName, SKILL_FILE_NAME), basePath: this.joinPath(project.dirFromWorkspacePath.basePath, project.dirFromWorkspacePath.path), getDirectoryName: () => skillName, - getAbsolutePath: () => skillDir + getAbsolutePath: () => this.joinPath(skillDir, SKILL_FILE_NAME) }) - } - } - - return results - } - - async registerGlobalOutputDirs(ctx: OutputPluginContext): Promise { - const {skills} = ctx.collectedInputContext - - if (skills == null || skills.length === 0) return [] - - const globalSkillsDir = this.getGlobalSkillsDir() - return [{ - pathKind: FilePathKind.Relative, - path: GLOBAL_SKILLS_DIR, - basePath: this.getHomeDir(), - getDirectoryName: () => GLOBAL_SKILLS_DIR, - getAbsolutePath: () => globalSkillsDir - }] - } - - async registerGlobalOutputFiles(ctx: OutputPluginContext): Promise { - const results: RelativePath[] = [] - const {skills} = ctx.collectedInputContext - - if (skills == null || skills.length === 0) return results - - const globalSkillsDir = this.getGlobalSkillsDir() - - for (const skill of skills) { - const skillName = skill.yamlFrontMatter.name - const skillDir = this.joinPath(globalSkillsDir, skillName) - - results.push({ // Register SKILL.md - pathKind: FilePathKind.Relative, - path: this.joinPath(GLOBAL_SKILLS_DIR, skillName, SKILL_FILE_NAME), - basePath: this.getHomeDir(), - getDirectoryName: () => skillName, - getAbsolutePath: () => this.joinPath(skillDir, SKILL_FILE_NAME) - }) - - if (skill.mcpConfig != null) { // Register mcp.json if skill has MCP configuration - results.push({ - pathKind: FilePathKind.Relative, - path: this.joinPath(GLOBAL_SKILLS_DIR, skillName, MCP_CONFIG_FILE), - basePath: this.getHomeDir(), - getDirectoryName: () => skillName, - getAbsolutePath: () => this.joinPath(skillDir, MCP_CONFIG_FILE) - }) - } - if (skill.childDocs != null) { // Register child docs (convert .mdx to .md) - for (const childDoc of skill.childDocs) { - const outputRelativePath = childDoc.relativePath.replace(/\.mdx$/, '.md') + if (skill.mcpConfig != null) { // 注册 mcp.json(如果有) results.push({ pathKind: FilePathKind.Relative, - path: this.joinPath(GLOBAL_SKILLS_DIR, skillName, outputRelativePath), - basePath: this.getHomeDir(), + path: this.joinPath(PROJECT_SKILLS_DIR, skillName, MCP_CONFIG_FILE), + basePath: this.joinPath(project.dirFromWorkspacePath.basePath, project.dirFromWorkspacePath.path), getDirectoryName: () => skillName, - getAbsolutePath: () => this.joinPath(skillDir, outputRelativePath) + getAbsolutePath: () => this.joinPath(skillDir, MCP_CONFIG_FILE) }) } - } - if (skill.resources != null) { // Register resources - for (const resource of skill.resources) { - results.push({ - pathKind: FilePathKind.Relative, - path: this.joinPath(GLOBAL_SKILLS_DIR, skillName, resource.relativePath), - basePath: this.getHomeDir(), - getDirectoryName: () => skillName, - getAbsolutePath: () => this.joinPath(skillDir, resource.relativePath) - }) + if (skill.childDocs != null) { // 注册 child docs + for (const childDoc of skill.childDocs) { + const outputRelativePath = childDoc.relativePath.replace(/\.mdx$/, '.md') + results.push({ + pathKind: FilePathKind.Relative, + path: this.joinPath(PROJECT_SKILLS_DIR, skillName, outputRelativePath), + basePath: this.joinPath(project.dirFromWorkspacePath.basePath, project.dirFromWorkspacePath.path), + getDirectoryName: () => skillName, + getAbsolutePath: () => this.joinPath(skillDir, outputRelativePath) + }) + } + } + + if (skill.resources != null) { // 注册 resources + for (const resource of skill.resources) { + results.push({ + pathKind: FilePathKind.Relative, + path: this.joinPath(PROJECT_SKILLS_DIR, skillName, resource.relativePath), + basePath: this.joinPath(project.dirFromWorkspacePath.basePath, project.dirFromWorkspacePath.path), + getDirectoryName: () => skillName, + getAbsolutePath: () => this.joinPath(skillDir, resource.relativePath) + }) + } } } } @@ -196,6 +163,14 @@ export class GenericSkillsOutputPlugin extends AbstractOutputPlugin { return results } + async registerGlobalOutputDirs(): Promise { + return [] // 不再使用全局输出目录 + } + + async registerGlobalOutputFiles(): Promise { + return [] // 不再使用全局输出文件 + } + async canWrite(ctx: OutputWriteContext): Promise { const {skills} = ctx.collectedInputContext const {projects} = ctx.collectedInputContext.workspace @@ -219,63 +194,26 @@ export class GenericSkillsOutputPlugin extends AbstractOutputPlugin { if (skills == null || skills.length === 0) return {files: fileResults, dirs: dirResults} - const globalSkillsDir = this.getGlobalSkillsDir() - - for (const project of projects) { // Create symlinks for each project + for (const project of projects) { if (project.dirFromWorkspacePath == null) continue - const projectSkillsDir = this.joinPath(project.dirFromWorkspacePath.basePath, project.dirFromWorkspacePath.path, PROJECT_SKILLS_DIR) + const projectSkillsDir = this.joinPath( + project.dirFromWorkspacePath.basePath, + project.dirFromWorkspacePath.path, + PROJECT_SKILLS_DIR + ) for (const skill of skills) { - const skillName = skill.yamlFrontMatter.name - const globalSkillDir = this.joinPath(globalSkillsDir, skillName) - const projectSkillDir = this.joinPath(projectSkillsDir, skillName) - - const relativePath: RelativePath = { - pathKind: FilePathKind.Relative, - path: this.joinPath(PROJECT_SKILLS_DIR, skillName), - basePath: this.joinPath(project.dirFromWorkspacePath.basePath, project.dirFromWorkspacePath.path), - getDirectoryName: () => skillName, - getAbsolutePath: () => projectSkillDir - } - - if (ctx.dryRun === true) { - this.log.trace({action: 'dryRun', type: 'symlink', target: globalSkillDir, link: projectSkillDir}) - fileResults.push({path: relativePath, success: true, skipped: false}) - continue - } - - try { - this.createSymlink(globalSkillDir, projectSkillDir, 'dir') - this.log.trace({action: 'symlink', type: 'skill', target: globalSkillDir, link: projectSkillDir}) - fileResults.push({path: relativePath, success: true}) - } - catch (error) { - const errMsg = error instanceof Error ? error.message : String(error) - this.log.error({action: 'symlink', type: 'skill', target: globalSkillDir, link: projectSkillDir, error: errMsg}) - fileResults.push({path: relativePath, success: false, error: error as Error}) - } + const skillResults = await this.writeSkill(ctx, skill, projectSkillsDir) // 将技能文件直接写入项目目录 + fileResults.push(...skillResults) } } return {files: fileResults, dirs: dirResults} } - async writeGlobalOutputs(ctx: OutputWriteContext): Promise { - const {skills} = ctx.collectedInputContext - const fileResults: WriteResult[] = [] - const dirResults: WriteResult[] = [] - - if (skills == null || skills.length === 0) return {files: fileResults, dirs: dirResults} - - const globalSkillsDir = this.getGlobalSkillsDir() - - for (const skill of skills) { // Write all skills to global ~/.skills/ directory - const skillResults = await this.writeSkill(ctx, skill, globalSkillsDir) - fileResults.push(...skillResults) - } - - return {files: fileResults, dirs: dirResults} + async writeGlobalOutputs(): Promise { + return {files: [], dirs: []} // 不再写入全局输出,所有技能文件直接写入项目目录 } private async writeSkill( diff --git a/packages/plugin-agentskills-compact/src/index.ts b/cli/src/plugins/plugin-agentskills-compact/index.ts similarity index 100% rename from packages/plugin-agentskills-compact/src/index.ts rename to cli/src/plugins/plugin-agentskills-compact/index.ts diff --git a/packages/plugin-agentsmd/src/AgentsOutputPlugin.ts b/cli/src/plugins/plugin-agentsmd/AgentsOutputPlugin.ts similarity index 100% rename from packages/plugin-agentsmd/src/AgentsOutputPlugin.ts rename to cli/src/plugins/plugin-agentsmd/AgentsOutputPlugin.ts diff --git a/packages/plugin-agentsmd/src/index.ts b/cli/src/plugins/plugin-agentsmd/index.ts similarity index 100% rename from packages/plugin-agentsmd/src/index.ts rename to cli/src/plugins/plugin-agentsmd/index.ts diff --git a/packages/plugin-antigravity/src/AntigravityOutputPlugin.test.ts b/cli/src/plugins/plugin-antigravity/AntigravityOutputPlugin.test.ts similarity index 100% rename from packages/plugin-antigravity/src/AntigravityOutputPlugin.test.ts rename to cli/src/plugins/plugin-antigravity/AntigravityOutputPlugin.test.ts diff --git a/packages/plugin-antigravity/src/AntigravityOutputPlugin.ts b/cli/src/plugins/plugin-antigravity/AntigravityOutputPlugin.ts similarity index 100% rename from packages/plugin-antigravity/src/AntigravityOutputPlugin.ts rename to cli/src/plugins/plugin-antigravity/AntigravityOutputPlugin.ts diff --git a/packages/plugin-antigravity/src/index.ts b/cli/src/plugins/plugin-antigravity/index.ts similarity index 100% rename from packages/plugin-antigravity/src/index.ts rename to cli/src/plugins/plugin-antigravity/index.ts diff --git a/packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.projectConfig.test.ts b/cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.projectConfig.test.ts similarity index 99% rename from packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.projectConfig.test.ts rename to cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.projectConfig.test.ts index 3d20ad39..442b8f95 100644 --- a/packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.projectConfig.test.ts +++ b/cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.projectConfig.test.ts @@ -2,7 +2,7 @@ import type {OutputPluginContext} from '@truenine/plugin-shared' import * as fs from 'node:fs' import * as os from 'node:os' import * as path from 'node:path' -import {collectFileNames, createMockProject, createMockRulePrompt} from '@truenine/plugin-shared/testing' +import {collectFileNames, createMockProject, createMockRulePrompt} from '@truenine/plugin-shared' import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest' import {ClaudeCodeCLIOutputPlugin} from './ClaudeCodeCLIOutputPlugin' diff --git a/packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.property.test.ts b/cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.property.test.ts similarity index 94% rename from packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.property.test.ts rename to cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.property.test.ts index bcc4d54c..8e1c8e80 100644 --- a/packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.property.test.ts +++ b/cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.property.test.ts @@ -116,7 +116,7 @@ describe('claudeCodeCLIOutputPlugin property tests', () => { await fc.assert(fc.asyncProperty(seriesGen, ruleNameGen, globsGen, contentGen, async (series, ruleName, globs, content) => { const rule = createMockRulePrompt({series, ruleName, globs, content}) const output = plugin.testBuildRuleContent(rule) - for (const g of globs) expect(output).toContain(`- "${g}"`) + for (const g of globs) expect(output).toMatch(new RegExp(`-\\s+['"]?${g.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&')}['"]?`)) // Accept quoted or unquoted formats }), {numRuns: 100}) }) }) @@ -133,7 +133,7 @@ describe('claudeCodeCLIOutputPlugin property tests', () => { expect(written).toContain('paths:') expect(written).not.toMatch(/^globs:/m) expect(written).toContain(content) - for (const g of globs) expect(written).toContain(`- "${g}"`) + for (const g of globs) expect(written).toMatch(new RegExp(`-\\s+['"]?${g.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&')}['"]?`)) // Accept quoted or unquoted formats }), {numRuns: 30}) }) @@ -154,7 +154,7 @@ describe('claudeCodeCLIOutputPlugin property tests', () => { const written = fs.readFileSync(filePath, 'utf8') expect(written).toContain('paths:') expect(written).toContain(content) - for (const g of globs) expect(written).toContain(`- "${g}"`) + for (const g of globs) expect(written).toMatch(new RegExp(`-\\s+['"]?${g.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&')}['"]?`)) // Accept quoted or unquoted formats }), {numRuns: 30}) }) }) diff --git a/packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.test.ts b/cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.test.ts similarity index 98% rename from packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.test.ts rename to cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.test.ts index cfd70e05..eda325c0 100644 --- a/packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.test.ts +++ b/cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.test.ts @@ -361,15 +361,15 @@ describe('claudeCodeCLIOutputPlugin', () => { it('should output paths as YAML array items', () => { const rule = createMockRulePrompt({series: '01', ruleName: 'ts', globs: ['**/*.ts', '**/*.tsx'], content: '# Body'}) const content = plugin.testBuildRuleContent(rule) - expect(content).toContain('- "**/*.ts"') - expect(content).toContain('- "**/*.tsx"') + expect(content).toMatch(/-\s+['"]?\*\*\/\*\.ts['"]?/) // Accept quoted or unquoted formats + expect(content).toMatch(/-\s+['"]?\*\*\/\*\.tsx['"]?/) }) - it('should double-quote paths that do not start with *', () => { + it('should include paths in YAML array', () => { const rule = createMockRulePrompt({series: '01', ruleName: 'ts', globs: ['src/components/*.tsx', 'lib/utils.ts'], content: '# Body'}) const content = plugin.testBuildRuleContent(rule) - expect(content).toContain('- "src/components/*.tsx"') - expect(content).toContain('- "lib/utils.ts"') + expect(content).toMatch(/-\s+['"]?src\/components\/\*\.tsx['"]?/) // Accept quoted or unquoted formats + expect(content).toMatch(/-\s+['"]?lib\/utils\.ts['"]?/) }) it('should preserve rule body after frontmatter', () => { diff --git a/packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.ts b/cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.ts similarity index 97% rename from packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.ts rename to cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.ts index 52b6de9b..050b9145 100644 --- a/packages/plugin-claude-code-cli/src/ClaudeCodeCLIOutputPlugin.ts +++ b/cli/src/plugins/plugin-claude-code-cli/ClaudeCodeCLIOutputPlugin.ts @@ -2,8 +2,7 @@ import type {OutputPluginContext, OutputWriteContext, RulePrompt, WriteResults} import type {RelativePath} from '@truenine/plugin-shared/types' import * as path from 'node:path' import {buildMarkdownWithFrontMatter, doubleQuoted} from '@truenine/md-compiler/markdown' -import {BaseCLIOutputPlugin} from '@truenine/plugin-output-shared' -import {applySubSeriesGlobPrefix, filterRulesByProjectConfig} from '@truenine/plugin-output-shared/utils' +import {applySubSeriesGlobPrefix, BaseCLIOutputPlugin, filterRulesByProjectConfig} from '@truenine/plugin-output-shared' const PROJECT_MEMORY_FILE = 'CLAUDE.md' const GLOBAL_CONFIG_DIR = '.claude' diff --git a/packages/plugin-claude-code-cli/src/index.ts b/cli/src/plugins/plugin-claude-code-cli/index.ts similarity index 100% rename from packages/plugin-claude-code-cli/src/index.ts rename to cli/src/plugins/plugin-claude-code-cli/index.ts diff --git a/packages/plugin-cursor/src/CursorOutputPlugin.projectConfig.test.ts b/cli/src/plugins/plugin-cursor/CursorOutputPlugin.projectConfig.test.ts similarity index 99% rename from packages/plugin-cursor/src/CursorOutputPlugin.projectConfig.test.ts rename to cli/src/plugins/plugin-cursor/CursorOutputPlugin.projectConfig.test.ts index e224b5c2..0a7209c3 100644 --- a/packages/plugin-cursor/src/CursorOutputPlugin.projectConfig.test.ts +++ b/cli/src/plugins/plugin-cursor/CursorOutputPlugin.projectConfig.test.ts @@ -2,7 +2,7 @@ import type {OutputPluginContext} from '@truenine/plugin-shared' import * as fs from 'node:fs' import * as os from 'node:os' import * as path from 'node:path' -import {collectFileNames, createMockProject, createMockRulePrompt} from '@truenine/plugin-shared/testing' +import {collectFileNames, createMockProject, createMockRulePrompt} from '@truenine/plugin-shared' import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest' import {CursorOutputPlugin} from './CursorOutputPlugin' diff --git a/packages/plugin-cursor/src/CursorOutputPlugin.test.ts b/cli/src/plugins/plugin-cursor/CursorOutputPlugin.test.ts similarity index 100% rename from packages/plugin-cursor/src/CursorOutputPlugin.test.ts rename to cli/src/plugins/plugin-cursor/CursorOutputPlugin.test.ts diff --git a/packages/plugin-cursor/src/CursorOutputPlugin.ts b/cli/src/plugins/plugin-cursor/CursorOutputPlugin.ts similarity index 99% rename from packages/plugin-cursor/src/CursorOutputPlugin.ts rename to cli/src/plugins/plugin-cursor/CursorOutputPlugin.ts index e9f5805e..4c65e6ff 100644 --- a/packages/plugin-cursor/src/CursorOutputPlugin.ts +++ b/cli/src/plugins/plugin-cursor/CursorOutputPlugin.ts @@ -13,8 +13,7 @@ import {Buffer} from 'node:buffer' import * as fs from 'node:fs' import * as path from 'node:path' import {buildMarkdownWithFrontMatter} from '@truenine/md-compiler/markdown' -import {AbstractOutputPlugin} from '@truenine/plugin-output-shared' -import {applySubSeriesGlobPrefix, filterCommandsByProjectConfig, filterRulesByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared/utils' +import {AbstractOutputPlugin, applySubSeriesGlobPrefix, filterCommandsByProjectConfig, filterRulesByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared' import {FilePathKind, PLUGIN_NAMES} from '@truenine/plugin-shared' const GLOBAL_CONFIG_DIR = '.cursor' diff --git a/packages/plugin-cursor/src/index.ts b/cli/src/plugins/plugin-cursor/index.ts similarity index 100% rename from packages/plugin-cursor/src/index.ts rename to cli/src/plugins/plugin-cursor/index.ts diff --git a/packages/plugin-droid-cli/src/DroidCLIOutputPlugin.test.ts b/cli/src/plugins/plugin-droid-cli/DroidCLIOutputPlugin.test.ts similarity index 100% rename from packages/plugin-droid-cli/src/DroidCLIOutputPlugin.test.ts rename to cli/src/plugins/plugin-droid-cli/DroidCLIOutputPlugin.test.ts diff --git a/packages/plugin-droid-cli/src/DroidCLIOutputPlugin.ts b/cli/src/plugins/plugin-droid-cli/DroidCLIOutputPlugin.ts similarity index 100% rename from packages/plugin-droid-cli/src/DroidCLIOutputPlugin.ts rename to cli/src/plugins/plugin-droid-cli/DroidCLIOutputPlugin.ts diff --git a/packages/plugin-droid-cli/src/index.ts b/cli/src/plugins/plugin-droid-cli/index.ts similarity index 100% rename from packages/plugin-droid-cli/src/index.ts rename to cli/src/plugins/plugin-droid-cli/index.ts diff --git a/packages/plugin-editorconfig/src/EditorConfigOutputPlugin.ts b/cli/src/plugins/plugin-editorconfig/EditorConfigOutputPlugin.ts similarity index 100% rename from packages/plugin-editorconfig/src/EditorConfigOutputPlugin.ts rename to cli/src/plugins/plugin-editorconfig/EditorConfigOutputPlugin.ts diff --git a/packages/plugin-editorconfig/src/index.ts b/cli/src/plugins/plugin-editorconfig/index.ts similarity index 100% rename from packages/plugin-editorconfig/src/index.ts rename to cli/src/plugins/plugin-editorconfig/index.ts diff --git a/packages/plugin-gemini-cli/src/GeminiCLIOutputPlugin.ts b/cli/src/plugins/plugin-gemini-cli/GeminiCLIOutputPlugin.ts similarity index 100% rename from packages/plugin-gemini-cli/src/GeminiCLIOutputPlugin.ts rename to cli/src/plugins/plugin-gemini-cli/GeminiCLIOutputPlugin.ts diff --git a/packages/plugin-gemini-cli/src/index.ts b/cli/src/plugins/plugin-gemini-cli/index.ts similarity index 100% rename from packages/plugin-gemini-cli/src/index.ts rename to cli/src/plugins/plugin-gemini-cli/index.ts diff --git a/packages/plugin-git-exclude/src/GitExcludeOutputPlugin.test.ts b/cli/src/plugins/plugin-git-exclude/GitExcludeOutputPlugin.test.ts similarity index 100% rename from packages/plugin-git-exclude/src/GitExcludeOutputPlugin.test.ts rename to cli/src/plugins/plugin-git-exclude/GitExcludeOutputPlugin.test.ts diff --git a/packages/plugin-git-exclude/src/GitExcludeOutputPlugin.ts b/cli/src/plugins/plugin-git-exclude/GitExcludeOutputPlugin.ts similarity index 98% rename from packages/plugin-git-exclude/src/GitExcludeOutputPlugin.ts rename to cli/src/plugins/plugin-git-exclude/GitExcludeOutputPlugin.ts index a8df3611..de19e3d4 100644 --- a/packages/plugin-git-exclude/src/GitExcludeOutputPlugin.ts +++ b/cli/src/plugins/plugin-git-exclude/GitExcludeOutputPlugin.ts @@ -7,8 +7,7 @@ import type { import type {RelativePath} from '@truenine/plugin-shared/types' import * as fs from 'node:fs' import * as path from 'node:path' -import {AbstractOutputPlugin} from '@truenine/plugin-output-shared' -import {findAllGitRepos, findGitModuleInfoDirs, resolveGitInfoDir} from '@truenine/plugin-output-shared/utils' +import {AbstractOutputPlugin, findAllGitRepos, findGitModuleInfoDirs, resolveGitInfoDir} from '@truenine/plugin-output-shared' import {FilePathKind} from '@truenine/plugin-shared' export class GitExcludeOutputPlugin extends AbstractOutputPlugin { diff --git a/packages/plugin-git-exclude/src/index.ts b/cli/src/plugins/plugin-git-exclude/index.ts similarity index 100% rename from packages/plugin-git-exclude/src/index.ts rename to cli/src/plugins/plugin-git-exclude/index.ts diff --git a/packages/plugin-input-agentskills/src/SkillInputPlugin.test.ts b/cli/src/plugins/plugin-input-agentskills/SkillInputPlugin.test.ts similarity index 100% rename from packages/plugin-input-agentskills/src/SkillInputPlugin.test.ts rename to cli/src/plugins/plugin-input-agentskills/SkillInputPlugin.test.ts diff --git a/packages/plugin-input-agentskills/src/SkillInputPlugin.ts b/cli/src/plugins/plugin-input-agentskills/SkillInputPlugin.ts similarity index 100% rename from packages/plugin-input-agentskills/src/SkillInputPlugin.ts rename to cli/src/plugins/plugin-input-agentskills/SkillInputPlugin.ts diff --git a/packages/plugin-input-agentskills/src/index.ts b/cli/src/plugins/plugin-input-agentskills/index.ts similarity index 100% rename from packages/plugin-input-agentskills/src/index.ts rename to cli/src/plugins/plugin-input-agentskills/index.ts diff --git a/packages/plugin-input-editorconfig/src/EditorConfigInputPlugin.ts b/cli/src/plugins/plugin-input-editorconfig/EditorConfigInputPlugin.ts similarity index 100% rename from packages/plugin-input-editorconfig/src/EditorConfigInputPlugin.ts rename to cli/src/plugins/plugin-input-editorconfig/EditorConfigInputPlugin.ts diff --git a/packages/plugin-input-editorconfig/src/index.ts b/cli/src/plugins/plugin-input-editorconfig/index.ts similarity index 100% rename from packages/plugin-input-editorconfig/src/index.ts rename to cli/src/plugins/plugin-input-editorconfig/index.ts diff --git a/packages/plugin-input-fast-command/src/FastCommandInputPlugin.test.ts b/cli/src/plugins/plugin-input-fast-command/FastCommandInputPlugin.test.ts similarity index 100% rename from packages/plugin-input-fast-command/src/FastCommandInputPlugin.test.ts rename to cli/src/plugins/plugin-input-fast-command/FastCommandInputPlugin.test.ts diff --git a/packages/plugin-input-fast-command/src/FastCommandInputPlugin.ts b/cli/src/plugins/plugin-input-fast-command/FastCommandInputPlugin.ts similarity index 100% rename from packages/plugin-input-fast-command/src/FastCommandInputPlugin.ts rename to cli/src/plugins/plugin-input-fast-command/FastCommandInputPlugin.ts diff --git a/packages/plugin-input-fast-command/src/index.ts b/cli/src/plugins/plugin-input-fast-command/index.ts similarity index 100% rename from packages/plugin-input-fast-command/src/index.ts rename to cli/src/plugins/plugin-input-fast-command/index.ts diff --git a/packages/plugin-input-git-exclude/src/GitExcludeInputPlugin.test.ts b/cli/src/plugins/plugin-input-git-exclude/GitExcludeInputPlugin.test.ts similarity index 98% rename from packages/plugin-input-git-exclude/src/GitExcludeInputPlugin.test.ts rename to cli/src/plugins/plugin-input-git-exclude/GitExcludeInputPlugin.test.ts index 26d24faa..a9199200 100644 --- a/packages/plugin-input-git-exclude/src/GitExcludeInputPlugin.test.ts +++ b/cli/src/plugins/plugin-input-git-exclude/GitExcludeInputPlugin.test.ts @@ -9,7 +9,7 @@ vi.mock('node:fs') const BASE_OPTIONS = { workspaceDir: '/workspace', shadowSourceProject: { - name: 'tnmsc-shadow', + name: 'aindex', skill: {src: 'src/skills', dist: 'dist/skills'}, fastCommand: {src: 'src/commands', dist: 'dist/commands'}, subAgent: {src: 'src/agents', dist: 'dist/agents'}, diff --git a/packages/plugin-input-git-exclude/src/GitExcludeInputPlugin.ts b/cli/src/plugins/plugin-input-git-exclude/GitExcludeInputPlugin.ts similarity index 100% rename from packages/plugin-input-git-exclude/src/GitExcludeInputPlugin.ts rename to cli/src/plugins/plugin-input-git-exclude/GitExcludeInputPlugin.ts diff --git a/packages/plugin-input-git-exclude/src/index.ts b/cli/src/plugins/plugin-input-git-exclude/index.ts similarity index 100% rename from packages/plugin-input-git-exclude/src/index.ts rename to cli/src/plugins/plugin-input-git-exclude/index.ts diff --git a/packages/plugin-input-gitignore/src/GitIgnoreInputPlugin.test.ts b/cli/src/plugins/plugin-input-gitignore/GitIgnoreInputPlugin.test.ts similarity index 98% rename from packages/plugin-input-gitignore/src/GitIgnoreInputPlugin.test.ts rename to cli/src/plugins/plugin-input-gitignore/GitIgnoreInputPlugin.test.ts index 26304fcb..f70fc2b4 100644 --- a/packages/plugin-input-gitignore/src/GitIgnoreInputPlugin.test.ts +++ b/cli/src/plugins/plugin-input-gitignore/GitIgnoreInputPlugin.test.ts @@ -10,7 +10,7 @@ vi.mock('node:fs') const BASE_OPTIONS = { workspaceDir: '/workspace', shadowSourceProject: { - name: 'tnmsc-shadow', + name: 'aindex', skill: {src: 'src/skills', dist: 'dist/skills'}, fastCommand: {src: 'src/commands', dist: 'dist/commands'}, subAgent: {src: 'src/agents', dist: 'dist/agents'}, diff --git a/packages/plugin-input-gitignore/src/GitIgnoreInputPlugin.ts b/cli/src/plugins/plugin-input-gitignore/GitIgnoreInputPlugin.ts similarity index 100% rename from packages/plugin-input-gitignore/src/GitIgnoreInputPlugin.ts rename to cli/src/plugins/plugin-input-gitignore/GitIgnoreInputPlugin.ts diff --git a/packages/plugin-input-gitignore/src/index.ts b/cli/src/plugins/plugin-input-gitignore/index.ts similarity index 100% rename from packages/plugin-input-gitignore/src/index.ts rename to cli/src/plugins/plugin-input-gitignore/index.ts diff --git a/packages/plugin-input-global-memory/src/GlobalMemoryInputPlugin.ts b/cli/src/plugins/plugin-input-global-memory/GlobalMemoryInputPlugin.ts similarity index 100% rename from packages/plugin-input-global-memory/src/GlobalMemoryInputPlugin.ts rename to cli/src/plugins/plugin-input-global-memory/GlobalMemoryInputPlugin.ts diff --git a/packages/plugin-input-global-memory/src/index.ts b/cli/src/plugins/plugin-input-global-memory/index.ts similarity index 100% rename from packages/plugin-input-global-memory/src/index.ts rename to cli/src/plugins/plugin-input-global-memory/index.ts diff --git a/packages/plugin-input-jetbrains-config/src/JetBrainsConfigInputPlugin.ts b/cli/src/plugins/plugin-input-jetbrains-config/JetBrainsConfigInputPlugin.ts similarity index 100% rename from packages/plugin-input-jetbrains-config/src/JetBrainsConfigInputPlugin.ts rename to cli/src/plugins/plugin-input-jetbrains-config/JetBrainsConfigInputPlugin.ts diff --git a/packages/plugin-input-jetbrains-config/src/index.ts b/cli/src/plugins/plugin-input-jetbrains-config/index.ts similarity index 100% rename from packages/plugin-input-jetbrains-config/src/index.ts rename to cli/src/plugins/plugin-input-jetbrains-config/index.ts diff --git a/packages/plugin-input-md-cleanup-effect/src/MarkdownWhitespaceCleanupEffectInputPlugin.property.test.ts b/cli/src/plugins/plugin-input-md-cleanup-effect/MarkdownWhitespaceCleanupEffectInputPlugin.property.test.ts similarity index 100% rename from packages/plugin-input-md-cleanup-effect/src/MarkdownWhitespaceCleanupEffectInputPlugin.property.test.ts rename to cli/src/plugins/plugin-input-md-cleanup-effect/MarkdownWhitespaceCleanupEffectInputPlugin.property.test.ts diff --git a/packages/plugin-input-md-cleanup-effect/src/MarkdownWhitespaceCleanupEffectInputPlugin.ts b/cli/src/plugins/plugin-input-md-cleanup-effect/MarkdownWhitespaceCleanupEffectInputPlugin.ts similarity index 100% rename from packages/plugin-input-md-cleanup-effect/src/MarkdownWhitespaceCleanupEffectInputPlugin.ts rename to cli/src/plugins/plugin-input-md-cleanup-effect/MarkdownWhitespaceCleanupEffectInputPlugin.ts diff --git a/packages/plugin-input-md-cleanup-effect/src/index.ts b/cli/src/plugins/plugin-input-md-cleanup-effect/index.ts similarity index 100% rename from packages/plugin-input-md-cleanup-effect/src/index.ts rename to cli/src/plugins/plugin-input-md-cleanup-effect/index.ts diff --git a/packages/plugin-input-orphan-cleanup-effect/src/OrphanFileCleanupEffectInputPlugin.property.test.ts b/cli/src/plugins/plugin-input-orphan-cleanup-effect/OrphanFileCleanupEffectInputPlugin.property.test.ts similarity index 100% rename from packages/plugin-input-orphan-cleanup-effect/src/OrphanFileCleanupEffectInputPlugin.property.test.ts rename to cli/src/plugins/plugin-input-orphan-cleanup-effect/OrphanFileCleanupEffectInputPlugin.property.test.ts diff --git a/packages/plugin-input-orphan-cleanup-effect/src/OrphanFileCleanupEffectInputPlugin.ts b/cli/src/plugins/plugin-input-orphan-cleanup-effect/OrphanFileCleanupEffectInputPlugin.ts similarity index 100% rename from packages/plugin-input-orphan-cleanup-effect/src/OrphanFileCleanupEffectInputPlugin.ts rename to cli/src/plugins/plugin-input-orphan-cleanup-effect/OrphanFileCleanupEffectInputPlugin.ts diff --git a/packages/plugin-input-orphan-cleanup-effect/src/index.ts b/cli/src/plugins/plugin-input-orphan-cleanup-effect/index.ts similarity index 100% rename from packages/plugin-input-orphan-cleanup-effect/src/index.ts rename to cli/src/plugins/plugin-input-orphan-cleanup-effect/index.ts diff --git a/packages/plugin-input-project-prompt/src/ProjectPromptInputPlugin.test.ts b/cli/src/plugins/plugin-input-project-prompt/ProjectPromptInputPlugin.test.ts similarity index 100% rename from packages/plugin-input-project-prompt/src/ProjectPromptInputPlugin.test.ts rename to cli/src/plugins/plugin-input-project-prompt/ProjectPromptInputPlugin.test.ts diff --git a/packages/plugin-input-project-prompt/src/ProjectPromptInputPlugin.ts b/cli/src/plugins/plugin-input-project-prompt/ProjectPromptInputPlugin.ts similarity index 100% rename from packages/plugin-input-project-prompt/src/ProjectPromptInputPlugin.ts rename to cli/src/plugins/plugin-input-project-prompt/ProjectPromptInputPlugin.ts diff --git a/packages/plugin-input-project-prompt/src/index.ts b/cli/src/plugins/plugin-input-project-prompt/index.ts similarity index 100% rename from packages/plugin-input-project-prompt/src/index.ts rename to cli/src/plugins/plugin-input-project-prompt/index.ts diff --git a/packages/plugin-input-readme/src/ReadmeMdInputPlugin.property.test.ts b/cli/src/plugins/plugin-input-readme/ReadmeMdInputPlugin.property.test.ts similarity index 100% rename from packages/plugin-input-readme/src/ReadmeMdInputPlugin.property.test.ts rename to cli/src/plugins/plugin-input-readme/ReadmeMdInputPlugin.property.test.ts diff --git a/packages/plugin-input-readme/src/ReadmeMdInputPlugin.ts b/cli/src/plugins/plugin-input-readme/ReadmeMdInputPlugin.ts similarity index 100% rename from packages/plugin-input-readme/src/ReadmeMdInputPlugin.ts rename to cli/src/plugins/plugin-input-readme/ReadmeMdInputPlugin.ts diff --git a/packages/plugin-input-readme/src/index.ts b/cli/src/plugins/plugin-input-readme/index.ts similarity index 100% rename from packages/plugin-input-readme/src/index.ts rename to cli/src/plugins/plugin-input-readme/index.ts diff --git a/packages/plugin-input-rule/src/RuleInputPlugin.test.ts b/cli/src/plugins/plugin-input-rule/RuleInputPlugin.test.ts similarity index 100% rename from packages/plugin-input-rule/src/RuleInputPlugin.test.ts rename to cli/src/plugins/plugin-input-rule/RuleInputPlugin.test.ts diff --git a/packages/plugin-input-rule/src/RuleInputPlugin.ts b/cli/src/plugins/plugin-input-rule/RuleInputPlugin.ts similarity index 100% rename from packages/plugin-input-rule/src/RuleInputPlugin.ts rename to cli/src/plugins/plugin-input-rule/RuleInputPlugin.ts diff --git a/packages/plugin-input-rule/src/index.ts b/cli/src/plugins/plugin-input-rule/index.ts similarity index 100% rename from packages/plugin-input-rule/src/index.ts rename to cli/src/plugins/plugin-input-rule/index.ts diff --git a/packages/plugin-input-shadow-project/src/ShadowProjectInputPlugin.test.ts b/cli/src/plugins/plugin-input-shadow-project/ShadowProjectInputPlugin.test.ts similarity index 100% rename from packages/plugin-input-shadow-project/src/ShadowProjectInputPlugin.test.ts rename to cli/src/plugins/plugin-input-shadow-project/ShadowProjectInputPlugin.test.ts diff --git a/packages/plugin-input-shadow-project/src/ShadowProjectInputPlugin.ts b/cli/src/plugins/plugin-input-shadow-project/ShadowProjectInputPlugin.ts similarity index 100% rename from packages/plugin-input-shadow-project/src/ShadowProjectInputPlugin.ts rename to cli/src/plugins/plugin-input-shadow-project/ShadowProjectInputPlugin.ts diff --git a/packages/plugin-input-shadow-project/src/index.ts b/cli/src/plugins/plugin-input-shadow-project/index.ts similarity index 100% rename from packages/plugin-input-shadow-project/src/index.ts rename to cli/src/plugins/plugin-input-shadow-project/index.ts diff --git a/packages/plugin-input-shared-ignore/src/AIAgentIgnoreInputPlugin.ts b/cli/src/plugins/plugin-input-shared-ignore/AIAgentIgnoreInputPlugin.ts similarity index 100% rename from packages/plugin-input-shared-ignore/src/AIAgentIgnoreInputPlugin.ts rename to cli/src/plugins/plugin-input-shared-ignore/AIAgentIgnoreInputPlugin.ts diff --git a/packages/plugin-input-shared-ignore/src/index.ts b/cli/src/plugins/plugin-input-shared-ignore/index.ts similarity index 100% rename from packages/plugin-input-shared-ignore/src/index.ts rename to cli/src/plugins/plugin-input-shared-ignore/index.ts diff --git a/packages/plugin-input-shared/src/AbstractInputPlugin.test.ts b/cli/src/plugins/plugin-input-shared/AbstractInputPlugin.test.ts similarity index 99% rename from packages/plugin-input-shared/src/AbstractInputPlugin.test.ts rename to cli/src/plugins/plugin-input-shared/AbstractInputPlugin.test.ts index b5ba177c..c9708abd 100644 --- a/packages/plugin-input-shared/src/AbstractInputPlugin.test.ts +++ b/cli/src/plugins/plugin-input-shared/AbstractInputPlugin.test.ts @@ -12,7 +12,7 @@ function createTestOptions(overrides: Partial = {}): Required { const {workspaceDir, shadowProjectDir} = plugin.exposeResolveBasePaths(options) expect(workspaceDir).toBe(path.normalize('/custom/workspace')) - expect(shadowProjectDir).toBe(path.normalize('/custom/workspace/tnmsc-shadow')) + expect(shadowProjectDir).toBe(path.normalize('/custom/workspace/aindex')) }) it('should construct shadow project dir from name', () => { diff --git a/packages/plugin-input-shared/src/AbstractInputPlugin.ts b/cli/src/plugins/plugin-input-shared/AbstractInputPlugin.ts similarity index 100% rename from packages/plugin-input-shared/src/AbstractInputPlugin.ts rename to cli/src/plugins/plugin-input-shared/AbstractInputPlugin.ts diff --git a/packages/plugin-input-shared/src/BaseDirectoryInputPlugin.ts b/cli/src/plugins/plugin-input-shared/BaseDirectoryInputPlugin.ts similarity index 100% rename from packages/plugin-input-shared/src/BaseDirectoryInputPlugin.ts rename to cli/src/plugins/plugin-input-shared/BaseDirectoryInputPlugin.ts diff --git a/packages/plugin-input-shared/src/BaseFileInputPlugin.ts b/cli/src/plugins/plugin-input-shared/BaseFileInputPlugin.ts similarity index 100% rename from packages/plugin-input-shared/src/BaseFileInputPlugin.ts rename to cli/src/plugins/plugin-input-shared/BaseFileInputPlugin.ts diff --git a/packages/plugin-input-shared/src/index.ts b/cli/src/plugins/plugin-input-shared/index.ts similarity index 80% rename from packages/plugin-input-shared/src/index.ts rename to cli/src/plugins/plugin-input-shared/index.ts index 0941c3dd..a1805ac1 100644 --- a/packages/plugin-input-shared/src/index.ts +++ b/cli/src/plugins/plugin-input-shared/index.ts @@ -13,3 +13,8 @@ export { export type { FileInputPluginOptions } from './BaseFileInputPlugin' +export { + GlobalScopeCollector, + ScopePriority, + ScopeRegistry +} from './scope' diff --git a/packages/plugin-input-shared/src/scope/GlobalScopeCollector.ts b/cli/src/plugins/plugin-input-shared/scope/GlobalScopeCollector.ts similarity index 100% rename from packages/plugin-input-shared/src/scope/GlobalScopeCollector.ts rename to cli/src/plugins/plugin-input-shared/scope/GlobalScopeCollector.ts diff --git a/packages/plugin-input-shared/src/scope/ScopeRegistry.ts b/cli/src/plugins/plugin-input-shared/scope/ScopeRegistry.ts similarity index 100% rename from packages/plugin-input-shared/src/scope/ScopeRegistry.ts rename to cli/src/plugins/plugin-input-shared/scope/ScopeRegistry.ts diff --git a/packages/plugin-input-shared/src/scope/index.ts b/cli/src/plugins/plugin-input-shared/scope/index.ts similarity index 100% rename from packages/plugin-input-shared/src/scope/index.ts rename to cli/src/plugins/plugin-input-shared/scope/index.ts diff --git a/packages/plugin-input-skill-sync-effect/src/SkillNonSrcFileSyncEffectInputPlugin.property.test.ts b/cli/src/plugins/plugin-input-skill-sync-effect/SkillNonSrcFileSyncEffectInputPlugin.property.test.ts similarity index 100% rename from packages/plugin-input-skill-sync-effect/src/SkillNonSrcFileSyncEffectInputPlugin.property.test.ts rename to cli/src/plugins/plugin-input-skill-sync-effect/SkillNonSrcFileSyncEffectInputPlugin.property.test.ts diff --git a/packages/plugin-input-skill-sync-effect/src/SkillNonSrcFileSyncEffectInputPlugin.ts b/cli/src/plugins/plugin-input-skill-sync-effect/SkillNonSrcFileSyncEffectInputPlugin.ts similarity index 100% rename from packages/plugin-input-skill-sync-effect/src/SkillNonSrcFileSyncEffectInputPlugin.ts rename to cli/src/plugins/plugin-input-skill-sync-effect/SkillNonSrcFileSyncEffectInputPlugin.ts diff --git a/packages/plugin-input-skill-sync-effect/src/index.ts b/cli/src/plugins/plugin-input-skill-sync-effect/index.ts similarity index 100% rename from packages/plugin-input-skill-sync-effect/src/index.ts rename to cli/src/plugins/plugin-input-skill-sync-effect/index.ts diff --git a/packages/plugin-input-subagent/src/SubAgentInputPlugin.test.ts b/cli/src/plugins/plugin-input-subagent/SubAgentInputPlugin.test.ts similarity index 100% rename from packages/plugin-input-subagent/src/SubAgentInputPlugin.test.ts rename to cli/src/plugins/plugin-input-subagent/SubAgentInputPlugin.test.ts diff --git a/packages/plugin-input-subagent/src/SubAgentInputPlugin.ts b/cli/src/plugins/plugin-input-subagent/SubAgentInputPlugin.ts similarity index 100% rename from packages/plugin-input-subagent/src/SubAgentInputPlugin.ts rename to cli/src/plugins/plugin-input-subagent/SubAgentInputPlugin.ts diff --git a/packages/plugin-input-subagent/src/index.ts b/cli/src/plugins/plugin-input-subagent/index.ts similarity index 100% rename from packages/plugin-input-subagent/src/index.ts rename to cli/src/plugins/plugin-input-subagent/index.ts diff --git a/packages/plugin-input-vscode-config/src/VSCodeConfigInputPlugin.ts b/cli/src/plugins/plugin-input-vscode-config/VSCodeConfigInputPlugin.ts similarity index 100% rename from packages/plugin-input-vscode-config/src/VSCodeConfigInputPlugin.ts rename to cli/src/plugins/plugin-input-vscode-config/VSCodeConfigInputPlugin.ts diff --git a/packages/plugin-input-vscode-config/src/index.ts b/cli/src/plugins/plugin-input-vscode-config/index.ts similarity index 100% rename from packages/plugin-input-vscode-config/src/index.ts rename to cli/src/plugins/plugin-input-vscode-config/index.ts diff --git a/packages/plugin-input-workspace/src/WorkspaceInputPlugin.ts b/cli/src/plugins/plugin-input-workspace/WorkspaceInputPlugin.ts similarity index 100% rename from packages/plugin-input-workspace/src/WorkspaceInputPlugin.ts rename to cli/src/plugins/plugin-input-workspace/WorkspaceInputPlugin.ts diff --git a/packages/plugin-input-workspace/src/index.ts b/cli/src/plugins/plugin-input-workspace/index.ts similarity index 100% rename from packages/plugin-input-workspace/src/index.ts rename to cli/src/plugins/plugin-input-workspace/index.ts diff --git a/packages/plugin-jetbrains-ai-codex/src/JetBrainsAIAssistantCodexOutputPlugin.test.ts b/cli/src/plugins/plugin-jetbrains-ai-codex/JetBrainsAIAssistantCodexOutputPlugin.test.ts similarity index 100% rename from packages/plugin-jetbrains-ai-codex/src/JetBrainsAIAssistantCodexOutputPlugin.test.ts rename to cli/src/plugins/plugin-jetbrains-ai-codex/JetBrainsAIAssistantCodexOutputPlugin.test.ts diff --git a/packages/plugin-jetbrains-ai-codex/src/JetBrainsAIAssistantCodexOutputPlugin.ts b/cli/src/plugins/plugin-jetbrains-ai-codex/JetBrainsAIAssistantCodexOutputPlugin.ts similarity index 99% rename from packages/plugin-jetbrains-ai-codex/src/JetBrainsAIAssistantCodexOutputPlugin.ts rename to cli/src/plugins/plugin-jetbrains-ai-codex/JetBrainsAIAssistantCodexOutputPlugin.ts index ac48d070..3d66aede 100644 --- a/packages/plugin-jetbrains-ai-codex/src/JetBrainsAIAssistantCodexOutputPlugin.ts +++ b/cli/src/plugins/plugin-jetbrains-ai-codex/JetBrainsAIAssistantCodexOutputPlugin.ts @@ -13,8 +13,7 @@ import * as fs from 'node:fs' import * as path from 'node:path' import {getPlatformFixedDir} from '@truenine/desk-paths' import {buildMarkdownWithFrontMatter} from '@truenine/md-compiler/markdown' -import {AbstractOutputPlugin} from '@truenine/plugin-output-shared' -import {filterCommandsByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared/utils' +import {AbstractOutputPlugin, filterCommandsByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared' import {FilePathKind, PLUGIN_NAMES} from '@truenine/plugin-shared' /** diff --git a/packages/plugin-jetbrains-ai-codex/src/index.ts b/cli/src/plugins/plugin-jetbrains-ai-codex/index.ts similarity index 100% rename from packages/plugin-jetbrains-ai-codex/src/index.ts rename to cli/src/plugins/plugin-jetbrains-ai-codex/index.ts diff --git a/packages/plugin-jetbrains-codestyle/src/JetBrainsIDECodeStyleConfigOutputPlugin.ts b/cli/src/plugins/plugin-jetbrains-codestyle/JetBrainsIDECodeStyleConfigOutputPlugin.ts similarity index 100% rename from packages/plugin-jetbrains-codestyle/src/JetBrainsIDECodeStyleConfigOutputPlugin.ts rename to cli/src/plugins/plugin-jetbrains-codestyle/JetBrainsIDECodeStyleConfigOutputPlugin.ts diff --git a/packages/plugin-jetbrains-codestyle/src/index.ts b/cli/src/plugins/plugin-jetbrains-codestyle/index.ts similarity index 100% rename from packages/plugin-jetbrains-codestyle/src/index.ts rename to cli/src/plugins/plugin-jetbrains-codestyle/index.ts diff --git a/packages/plugin-openai-codex-cli/src/CodexCLIOutputPlugin.ts b/cli/src/plugins/plugin-openai-codex-cli/CodexCLIOutputPlugin.ts similarity index 97% rename from packages/plugin-openai-codex-cli/src/CodexCLIOutputPlugin.ts rename to cli/src/plugins/plugin-openai-codex-cli/CodexCLIOutputPlugin.ts index 99b4c210..e9893253 100644 --- a/packages/plugin-openai-codex-cli/src/CodexCLIOutputPlugin.ts +++ b/cli/src/plugins/plugin-openai-codex-cli/CodexCLIOutputPlugin.ts @@ -9,8 +9,7 @@ import type { import type {RelativePath} from '@truenine/plugin-shared/types' import * as path from 'node:path' import {buildMarkdownWithFrontMatter} from '@truenine/md-compiler/markdown' -import {AbstractOutputPlugin} from '@truenine/plugin-output-shared' -import {filterCommandsByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared/utils' +import {AbstractOutputPlugin, filterCommandsByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared' import {PLUGIN_NAMES} from '@truenine/plugin-shared' const PROJECT_MEMORY_FILE = 'AGENTS.md' diff --git a/packages/plugin-openai-codex-cli/src/index.ts b/cli/src/plugins/plugin-openai-codex-cli/index.ts similarity index 100% rename from packages/plugin-openai-codex-cli/src/index.ts rename to cli/src/plugins/plugin-openai-codex-cli/index.ts diff --git a/packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.projectConfig.test.ts b/cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.projectConfig.test.ts similarity index 99% rename from packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.projectConfig.test.ts rename to cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.projectConfig.test.ts index 135af5cf..3ae4e071 100644 --- a/packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.projectConfig.test.ts +++ b/cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.projectConfig.test.ts @@ -2,7 +2,7 @@ import type {OutputPluginContext} from '@truenine/plugin-shared' import * as fs from 'node:fs' import * as os from 'node:os' import * as path from 'node:path' -import {collectFileNames, createMockProject, createMockRulePrompt} from '@truenine/plugin-shared/testing' +import {collectFileNames, createMockProject, createMockRulePrompt} from '@truenine/plugin-shared' import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest' import {OpencodeCLIOutputPlugin} from './OpencodeCLIOutputPlugin' diff --git a/packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.property.test.ts b/cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.property.test.ts similarity index 98% rename from packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.property.test.ts rename to cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.property.test.ts index 0ca383b5..ce30d4e4 100644 --- a/packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.property.test.ts +++ b/cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.property.test.ts @@ -116,7 +116,7 @@ describe('opencodeCLIOutputPlugin property tests', () => { await fc.assert(fc.asyncProperty(seriesGen, ruleNameGen, globsGen, contentGen, async (series, ruleName, globs, content) => { const rule = createMockRulePrompt({series, ruleName, globs, content}) const output = plugin.testBuildRuleContent(rule) - for (const g of globs) expect(output).toMatch(new RegExp(`- "${g.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&')}"|- ${g.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&')}`)) + for (const g of globs) expect(output).toMatch(new RegExp(`-\\s+['"]?${g.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&')}['"]?`)) // Accept quoted or unquoted formats }), {numRuns: 100}) }) }) diff --git a/packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.test.ts b/cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.test.ts similarity index 99% rename from packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.test.ts rename to cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.test.ts index 068f2dd0..21b978dc 100644 --- a/packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.test.ts +++ b/cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.test.ts @@ -642,8 +642,8 @@ describe('opencodeCLIOutputPlugin', () => { it('should output globs as YAML array items', () => { const rule = createMockRulePrompt({series: '01', ruleName: 'ts', globs: ['**/*.ts', '**/*.tsx'], content: '# Body'}) const content = plugin.testBuildRuleContent(rule) - expect(content).toContain('- "**/*.ts"') - expect(content).toContain('- "**/*.tsx"') + expect(content).toMatch(/-\s+['"]?\*\*\/\*\.ts['"]?/) // Accept quoted or unquoted formats + expect(content).toMatch(/-\s+['"]?\*\*\/\*\.tsx['"]?/) }) it('should preserve rule body after frontmatter', () => { diff --git a/packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.ts b/cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.ts similarity index 98% rename from packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.ts rename to cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.ts index ca9fac85..4a70d190 100644 --- a/packages/plugin-opencode-cli/src/OpencodeCLIOutputPlugin.ts +++ b/cli/src/plugins/plugin-opencode-cli/OpencodeCLIOutputPlugin.ts @@ -2,8 +2,7 @@ import type {FastCommandPrompt, McpServerConfig, OutputPluginContext, OutputWrit import type {RelativePath} from '@truenine/plugin-shared/types' import * as fs from 'node:fs' import * as path from 'node:path' -import {BaseCLIOutputPlugin} from '@truenine/plugin-output-shared' -import {applySubSeriesGlobPrefix, filterRulesByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared/utils' +import {applySubSeriesGlobPrefix, BaseCLIOutputPlugin, filterRulesByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared' import {FilePathKind, PLUGIN_NAMES} from '@truenine/plugin-shared' const GLOBAL_MEMORY_FILE = 'AGENTS.md' diff --git a/packages/plugin-opencode-cli/src/index.ts b/cli/src/plugins/plugin-opencode-cli/index.ts similarity index 100% rename from packages/plugin-opencode-cli/src/index.ts rename to cli/src/plugins/plugin-opencode-cli/index.ts diff --git a/packages/plugin-output-shared/src/AbstractOutputPlugin.test.ts b/cli/src/plugins/plugin-output-shared/AbstractOutputPlugin.test.ts similarity index 100% rename from packages/plugin-output-shared/src/AbstractOutputPlugin.test.ts rename to cli/src/plugins/plugin-output-shared/AbstractOutputPlugin.test.ts diff --git a/packages/plugin-output-shared/src/AbstractOutputPlugin.ts b/cli/src/plugins/plugin-output-shared/AbstractOutputPlugin.ts similarity index 100% rename from packages/plugin-output-shared/src/AbstractOutputPlugin.ts rename to cli/src/plugins/plugin-output-shared/AbstractOutputPlugin.ts diff --git a/packages/plugin-output-shared/src/BaseCLIOutputPlugin.ts b/cli/src/plugins/plugin-output-shared/BaseCLIOutputPlugin.ts similarity index 99% rename from packages/plugin-output-shared/src/BaseCLIOutputPlugin.ts rename to cli/src/plugins/plugin-output-shared/BaseCLIOutputPlugin.ts index 3c58599a..cfe8db8e 100644 --- a/packages/plugin-output-shared/src/BaseCLIOutputPlugin.ts +++ b/cli/src/plugins/plugin-output-shared/BaseCLIOutputPlugin.ts @@ -14,7 +14,7 @@ import type {AbstractOutputPluginOptions} from './AbstractOutputPlugin' import * as path from 'node:path' import {writeFileSync as deskWriteFileSync} from '@truenine/desk-paths' import {mdxToMd} from '@truenine/md-compiler' -import {GlobalScopeCollector} from '@truenine/plugin-input-shared/scope' +import {GlobalScopeCollector} from '@truenine/plugin-input-shared' import {AbstractOutputPlugin} from './AbstractOutputPlugin' import {filterCommandsByProjectConfig, filterSkillsByProjectConfig, filterSubAgentsByProjectConfig} from './utils' diff --git a/packages/plugin-output-shared/src/index.ts b/cli/src/plugins/plugin-output-shared/index.ts similarity index 53% rename from packages/plugin-output-shared/src/index.ts rename to cli/src/plugins/plugin-output-shared/index.ts index 00e937bd..a93e9de3 100644 --- a/packages/plugin-output-shared/src/index.ts +++ b/cli/src/plugins/plugin-output-shared/index.ts @@ -12,3 +12,15 @@ export { export type { BaseCLIOutputPluginOptions } from './BaseCLIOutputPlugin' +export { + applySubSeriesGlobPrefix, + filterCommandsByProjectConfig, + filterRulesByProjectConfig, + filterSkillsByProjectConfig, + findAllGitRepos, + findGitModuleInfoDirs, + matchesSeries, + resolveEffectiveIncludeSeries, + resolveGitInfoDir, + resolveSubSeries +} from './utils' diff --git a/packages/plugin-output-shared/src/registry/RegistryWriter.ts b/cli/src/plugins/plugin-output-shared/registry/RegistryWriter.ts similarity index 100% rename from packages/plugin-output-shared/src/registry/RegistryWriter.ts rename to cli/src/plugins/plugin-output-shared/registry/RegistryWriter.ts diff --git a/packages/plugin-output-shared/src/registry/index.ts b/cli/src/plugins/plugin-output-shared/registry/index.ts similarity index 100% rename from packages/plugin-output-shared/src/registry/index.ts rename to cli/src/plugins/plugin-output-shared/registry/index.ts diff --git a/packages/plugin-output-shared/src/utils/commandFilter.ts b/cli/src/plugins/plugin-output-shared/utils/commandFilter.ts similarity index 100% rename from packages/plugin-output-shared/src/utils/commandFilter.ts rename to cli/src/plugins/plugin-output-shared/utils/commandFilter.ts diff --git a/packages/plugin-output-shared/src/utils/gitUtils.ts b/cli/src/plugins/plugin-output-shared/utils/gitUtils.ts similarity index 100% rename from packages/plugin-output-shared/src/utils/gitUtils.ts rename to cli/src/plugins/plugin-output-shared/utils/gitUtils.ts diff --git a/packages/plugin-output-shared/src/utils/index.ts b/cli/src/plugins/plugin-output-shared/utils/index.ts similarity index 100% rename from packages/plugin-output-shared/src/utils/index.ts rename to cli/src/plugins/plugin-output-shared/utils/index.ts diff --git a/packages/plugin-output-shared/src/utils/pathNormalization.property.test.ts b/cli/src/plugins/plugin-output-shared/utils/pathNormalization.property.test.ts similarity index 100% rename from packages/plugin-output-shared/src/utils/pathNormalization.property.test.ts rename to cli/src/plugins/plugin-output-shared/utils/pathNormalization.property.test.ts diff --git a/packages/plugin-output-shared/src/utils/ruleFilter.ts b/cli/src/plugins/plugin-output-shared/utils/ruleFilter.ts similarity index 100% rename from packages/plugin-output-shared/src/utils/ruleFilter.ts rename to cli/src/plugins/plugin-output-shared/utils/ruleFilter.ts diff --git a/packages/plugin-output-shared/src/utils/seriesFilter.napi-equivalence.property.test.ts b/cli/src/plugins/plugin-output-shared/utils/seriesFilter.napi-equivalence.property.test.ts similarity index 100% rename from packages/plugin-output-shared/src/utils/seriesFilter.napi-equivalence.property.test.ts rename to cli/src/plugins/plugin-output-shared/utils/seriesFilter.napi-equivalence.property.test.ts diff --git a/packages/plugin-output-shared/src/utils/seriesFilter.property.test.ts b/cli/src/plugins/plugin-output-shared/utils/seriesFilter.property.test.ts similarity index 100% rename from packages/plugin-output-shared/src/utils/seriesFilter.property.test.ts rename to cli/src/plugins/plugin-output-shared/utils/seriesFilter.property.test.ts diff --git a/packages/plugin-output-shared/src/utils/seriesFilter.ts b/cli/src/plugins/plugin-output-shared/utils/seriesFilter.ts similarity index 100% rename from packages/plugin-output-shared/src/utils/seriesFilter.ts rename to cli/src/plugins/plugin-output-shared/utils/seriesFilter.ts diff --git a/packages/plugin-output-shared/src/utils/skillFilter.ts b/cli/src/plugins/plugin-output-shared/utils/skillFilter.ts similarity index 100% rename from packages/plugin-output-shared/src/utils/skillFilter.ts rename to cli/src/plugins/plugin-output-shared/utils/skillFilter.ts diff --git a/packages/plugin-output-shared/src/utils/subAgentFilter.ts b/cli/src/plugins/plugin-output-shared/utils/subAgentFilter.ts similarity index 100% rename from packages/plugin-output-shared/src/utils/subAgentFilter.ts rename to cli/src/plugins/plugin-output-shared/utils/subAgentFilter.ts diff --git a/packages/plugin-output-shared/src/utils/subSeriesGlobExpansion.property.test.ts b/cli/src/plugins/plugin-output-shared/utils/subSeriesGlobExpansion.property.test.ts similarity index 100% rename from packages/plugin-output-shared/src/utils/subSeriesGlobExpansion.property.test.ts rename to cli/src/plugins/plugin-output-shared/utils/subSeriesGlobExpansion.property.test.ts diff --git a/packages/plugin-output-shared/src/utils/typeSpecificFilters.property.test.ts b/cli/src/plugins/plugin-output-shared/utils/typeSpecificFilters.property.test.ts similarity index 97% rename from packages/plugin-output-shared/src/utils/typeSpecificFilters.property.test.ts rename to cli/src/plugins/plugin-output-shared/utils/typeSpecificFilters.property.test.ts index 6bb0ddc5..08bf5b0f 100644 --- a/packages/plugin-output-shared/src/utils/typeSpecificFilters.property.test.ts +++ b/cli/src/plugins/plugin-output-shared/utils/typeSpecificFilters.property.test.ts @@ -1,6 +1,6 @@ /** Property 6: Type-specific filters use correct config sections. Validates: Requirements 7.1, 7.2, 7.3, 7.4 */ -import type {FastCommandPrompt, RulePrompt, SkillPrompt, SubAgentPrompt} from '@truenine/plugin-shared' -import type {ProjectConfig} from '@truenine/plugin-shared/types' +import type {FastCommandPrompt, RulePrompt, SkillPrompt, SubAgentPrompt} from '../../../plugin-shared' +import type {ProjectConfig} from '../../../plugin-shared/types' import * as fc from 'fast-check' import {describe, expect, it} from 'vitest' diff --git a/packages/plugin-qoder-ide/src/QoderIDEPluginOutputPlugin.frontmatter.test.ts b/cli/src/plugins/plugin-qoder-ide/QoderIDEPluginOutputPlugin.frontmatter.test.ts similarity index 100% rename from packages/plugin-qoder-ide/src/QoderIDEPluginOutputPlugin.frontmatter.test.ts rename to cli/src/plugins/plugin-qoder-ide/QoderIDEPluginOutputPlugin.frontmatter.test.ts diff --git a/packages/plugin-qoder-ide/src/QoderIDEPluginOutputPlugin.projectConfig.test.ts b/cli/src/plugins/plugin-qoder-ide/QoderIDEPluginOutputPlugin.projectConfig.test.ts similarity index 99% rename from packages/plugin-qoder-ide/src/QoderIDEPluginOutputPlugin.projectConfig.test.ts rename to cli/src/plugins/plugin-qoder-ide/QoderIDEPluginOutputPlugin.projectConfig.test.ts index cef861dc..569b278c 100644 --- a/packages/plugin-qoder-ide/src/QoderIDEPluginOutputPlugin.projectConfig.test.ts +++ b/cli/src/plugins/plugin-qoder-ide/QoderIDEPluginOutputPlugin.projectConfig.test.ts @@ -2,7 +2,7 @@ import type {OutputWriteContext} from '@truenine/plugin-shared' import * as fs from 'node:fs' import * as os from 'node:os' import * as path from 'node:path' -import {createMockProject, createMockRulePrompt} from '@truenine/plugin-shared/testing' +import {createMockProject, createMockRulePrompt} from '@truenine/plugin-shared' import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest' import {QoderIDEPluginOutputPlugin} from './QoderIDEPluginOutputPlugin' diff --git a/packages/plugin-qoder-ide/src/QoderIDEPluginOutputPlugin.test.ts b/cli/src/plugins/plugin-qoder-ide/QoderIDEPluginOutputPlugin.test.ts similarity index 100% rename from packages/plugin-qoder-ide/src/QoderIDEPluginOutputPlugin.test.ts rename to cli/src/plugins/plugin-qoder-ide/QoderIDEPluginOutputPlugin.test.ts diff --git a/packages/plugin-qoder-ide/src/QoderIDEPluginOutputPlugin.ts b/cli/src/plugins/plugin-qoder-ide/QoderIDEPluginOutputPlugin.ts similarity index 98% rename from packages/plugin-qoder-ide/src/QoderIDEPluginOutputPlugin.ts rename to cli/src/plugins/plugin-qoder-ide/QoderIDEPluginOutputPlugin.ts index eb3ef122..e7183c22 100644 --- a/packages/plugin-qoder-ide/src/QoderIDEPluginOutputPlugin.ts +++ b/cli/src/plugins/plugin-qoder-ide/QoderIDEPluginOutputPlugin.ts @@ -12,8 +12,7 @@ import type {RelativePath} from '@truenine/plugin-shared/types' import {Buffer} from 'node:buffer' import * as path from 'node:path' import {buildMarkdownWithFrontMatter} from '@truenine/md-compiler/markdown' -import {AbstractOutputPlugin} from '@truenine/plugin-output-shared' -import {applySubSeriesGlobPrefix, filterCommandsByProjectConfig, filterRulesByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared/utils' +import {AbstractOutputPlugin, applySubSeriesGlobPrefix, filterCommandsByProjectConfig, filterRulesByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared' const QODER_CONFIG_DIR = '.qoder' const RULES_SUBDIR = 'rules' diff --git a/packages/plugin-qoder-ide/src/index.ts b/cli/src/plugins/plugin-qoder-ide/index.ts similarity index 100% rename from packages/plugin-qoder-ide/src/index.ts rename to cli/src/plugins/plugin-qoder-ide/index.ts diff --git a/packages/plugin-readme/src/ReadmeMdConfigFileOutputPlugin.property.test.ts b/cli/src/plugins/plugin-readme/ReadmeMdConfigFileOutputPlugin.property.test.ts similarity index 100% rename from packages/plugin-readme/src/ReadmeMdConfigFileOutputPlugin.property.test.ts rename to cli/src/plugins/plugin-readme/ReadmeMdConfigFileOutputPlugin.property.test.ts diff --git a/packages/plugin-readme/src/ReadmeMdConfigFileOutputPlugin.ts b/cli/src/plugins/plugin-readme/ReadmeMdConfigFileOutputPlugin.ts similarity index 100% rename from packages/plugin-readme/src/ReadmeMdConfigFileOutputPlugin.ts rename to cli/src/plugins/plugin-readme/ReadmeMdConfigFileOutputPlugin.ts diff --git a/packages/plugin-readme/src/index.ts b/cli/src/plugins/plugin-readme/index.ts similarity index 100% rename from packages/plugin-readme/src/index.ts rename to cli/src/plugins/plugin-readme/index.ts diff --git a/packages/plugin-shared/src/AbstractPlugin.ts b/cli/src/plugins/plugin-shared/AbstractPlugin.ts similarity index 100% rename from packages/plugin-shared/src/AbstractPlugin.ts rename to cli/src/plugins/plugin-shared/AbstractPlugin.ts diff --git a/packages/plugin-shared/src/PluginNames.ts b/cli/src/plugins/plugin-shared/PluginNames.ts similarity index 100% rename from packages/plugin-shared/src/PluginNames.ts rename to cli/src/plugins/plugin-shared/PluginNames.ts diff --git a/packages/plugin-shared/src/constants.ts b/cli/src/plugins/plugin-shared/constants.ts similarity index 100% rename from packages/plugin-shared/src/constants.ts rename to cli/src/plugins/plugin-shared/constants.ts diff --git a/packages/plugin-shared/src/index.ts b/cli/src/plugins/plugin-shared/index.ts similarity index 80% rename from packages/plugin-shared/src/index.ts rename to cli/src/plugins/plugin-shared/index.ts index 3b272060..741ae66c 100644 --- a/packages/plugin-shared/src/index.ts +++ b/cli/src/plugins/plugin-shared/index.ts @@ -20,4 +20,9 @@ export { export type { PluginName } from './PluginNames' +export { + collectFileNames, + createMockProject, + createMockRulePrompt +} from './testing' export * from './types' diff --git a/packages/plugin-shared/src/log.ts b/cli/src/plugins/plugin-shared/log.ts similarity index 100% rename from packages/plugin-shared/src/log.ts rename to cli/src/plugins/plugin-shared/log.ts diff --git a/packages/plugin-shared/src/testing/index.ts b/cli/src/plugins/plugin-shared/testing/index.ts similarity index 100% rename from packages/plugin-shared/src/testing/index.ts rename to cli/src/plugins/plugin-shared/testing/index.ts diff --git a/packages/plugin-shared/src/types/ConfigTypes.schema.property.test.ts b/cli/src/plugins/plugin-shared/types/ConfigTypes.schema.property.test.ts similarity index 100% rename from packages/plugin-shared/src/types/ConfigTypes.schema.property.test.ts rename to cli/src/plugins/plugin-shared/types/ConfigTypes.schema.property.test.ts diff --git a/packages/plugin-shared/src/types/ConfigTypes.schema.ts b/cli/src/plugins/plugin-shared/types/ConfigTypes.schema.ts similarity index 100% rename from packages/plugin-shared/src/types/ConfigTypes.schema.ts rename to cli/src/plugins/plugin-shared/types/ConfigTypes.schema.ts diff --git a/packages/plugin-shared/src/types/Enums.ts b/cli/src/plugins/plugin-shared/types/Enums.ts similarity index 100% rename from packages/plugin-shared/src/types/Enums.ts rename to cli/src/plugins/plugin-shared/types/Enums.ts diff --git a/packages/plugin-shared/src/types/Errors.ts b/cli/src/plugins/plugin-shared/types/Errors.ts similarity index 100% rename from packages/plugin-shared/src/types/Errors.ts rename to cli/src/plugins/plugin-shared/types/Errors.ts diff --git a/packages/plugin-shared/src/types/ExportMetadataTypes.ts b/cli/src/plugins/plugin-shared/types/ExportMetadataTypes.ts similarity index 100% rename from packages/plugin-shared/src/types/ExportMetadataTypes.ts rename to cli/src/plugins/plugin-shared/types/ExportMetadataTypes.ts diff --git a/packages/plugin-shared/src/types/FileSystemTypes.ts b/cli/src/plugins/plugin-shared/types/FileSystemTypes.ts similarity index 100% rename from packages/plugin-shared/src/types/FileSystemTypes.ts rename to cli/src/plugins/plugin-shared/types/FileSystemTypes.ts diff --git a/packages/plugin-shared/src/types/InputTypes.ts b/cli/src/plugins/plugin-shared/types/InputTypes.ts similarity index 100% rename from packages/plugin-shared/src/types/InputTypes.ts rename to cli/src/plugins/plugin-shared/types/InputTypes.ts diff --git a/packages/plugin-shared/src/types/OutputTypes.ts b/cli/src/plugins/plugin-shared/types/OutputTypes.ts similarity index 100% rename from packages/plugin-shared/src/types/OutputTypes.ts rename to cli/src/plugins/plugin-shared/types/OutputTypes.ts diff --git a/packages/plugin-shared/src/types/PluginTypes.ts b/cli/src/plugins/plugin-shared/types/PluginTypes.ts similarity index 99% rename from packages/plugin-shared/src/types/PluginTypes.ts rename to cli/src/plugins/plugin-shared/types/PluginTypes.ts index 0e2cf619..cdc9cf06 100644 --- a/packages/plugin-shared/src/types/PluginTypes.ts +++ b/cli/src/plugins/plugin-shared/types/PluginTypes.ts @@ -8,6 +8,8 @@ import type { Project } from './InputTypes' +export type FastGlobType = typeof import('fast-glob') + /** * Opaque type for ScopeRegistry. * Concrete implementation lives in plugin-input-shared. @@ -27,7 +29,7 @@ export interface PluginContext { logger: ILogger fs: typeof import('node:fs') path: typeof import('node:path') - glob: typeof import('fast-glob') + glob: FastGlobType } export interface InputPluginContext extends PluginContext { @@ -153,7 +155,7 @@ export interface InputEffectContext { /** Path module */ readonly path: typeof import('node:path') /** Glob module for file matching */ - readonly glob: typeof import('fast-glob') + readonly glob: FastGlobType /** Child process spawn function */ readonly spawn: typeof import('node:child_process').spawn /** User configuration options */ diff --git a/packages/plugin-shared/src/types/PromptTypes.ts b/cli/src/plugins/plugin-shared/types/PromptTypes.ts similarity index 100% rename from packages/plugin-shared/src/types/PromptTypes.ts rename to cli/src/plugins/plugin-shared/types/PromptTypes.ts diff --git a/packages/plugin-shared/src/types/RegistryTypes.ts b/cli/src/plugins/plugin-shared/types/RegistryTypes.ts similarity index 100% rename from packages/plugin-shared/src/types/RegistryTypes.ts rename to cli/src/plugins/plugin-shared/types/RegistryTypes.ts diff --git a/packages/plugin-shared/src/types/ShadowSourceProjectTypes.ts b/cli/src/plugins/plugin-shared/types/ShadowSourceProjectTypes.ts similarity index 100% rename from packages/plugin-shared/src/types/ShadowSourceProjectTypes.ts rename to cli/src/plugins/plugin-shared/types/ShadowSourceProjectTypes.ts diff --git a/packages/plugin-shared/src/types/index.ts b/cli/src/plugins/plugin-shared/types/index.ts similarity index 100% rename from packages/plugin-shared/src/types/index.ts rename to cli/src/plugins/plugin-shared/types/index.ts diff --git a/packages/plugin-shared/src/types/seriNamePropagation.property.test.ts b/cli/src/plugins/plugin-shared/types/seriNamePropagation.property.test.ts similarity index 100% rename from packages/plugin-shared/src/types/seriNamePropagation.property.test.ts rename to cli/src/plugins/plugin-shared/types/seriNamePropagation.property.test.ts diff --git a/packages/plugin-trae-ide/src/TraeIDEOutputPlugin.test.ts b/cli/src/plugins/plugin-trae-ide/TraeIDEOutputPlugin.test.ts similarity index 100% rename from packages/plugin-trae-ide/src/TraeIDEOutputPlugin.test.ts rename to cli/src/plugins/plugin-trae-ide/TraeIDEOutputPlugin.test.ts diff --git a/packages/plugin-trae-ide/src/TraeIDEOutputPlugin.ts b/cli/src/plugins/plugin-trae-ide/TraeIDEOutputPlugin.ts similarity index 97% rename from packages/plugin-trae-ide/src/TraeIDEOutputPlugin.ts rename to cli/src/plugins/plugin-trae-ide/TraeIDEOutputPlugin.ts index 971eb8c3..4632762f 100644 --- a/packages/plugin-trae-ide/src/TraeIDEOutputPlugin.ts +++ b/cli/src/plugins/plugin-trae-ide/TraeIDEOutputPlugin.ts @@ -9,8 +9,7 @@ import type { } from '@truenine/plugin-shared' import type {RelativePath} from '@truenine/plugin-shared/types' import * as path from 'node:path' -import {AbstractOutputPlugin} from '@truenine/plugin-output-shared' -import {filterCommandsByProjectConfig} from '@truenine/plugin-output-shared/utils' +import {AbstractOutputPlugin, filterCommandsByProjectConfig} from '@truenine/plugin-output-shared' const GLOBAL_MEMORY_FILE = 'GLOBAL.md' const GLOBAL_CONFIG_DIR = '.trae' diff --git a/packages/plugin-trae-ide/src/index.ts b/cli/src/plugins/plugin-trae-ide/index.ts similarity index 100% rename from packages/plugin-trae-ide/src/index.ts rename to cli/src/plugins/plugin-trae-ide/index.ts diff --git a/packages/plugin-vscode/src/VisualStudioCodeIDEConfigOutputPlugin.ts b/cli/src/plugins/plugin-vscode/VisualStudioCodeIDEConfigOutputPlugin.ts similarity index 100% rename from packages/plugin-vscode/src/VisualStudioCodeIDEConfigOutputPlugin.ts rename to cli/src/plugins/plugin-vscode/VisualStudioCodeIDEConfigOutputPlugin.ts diff --git a/packages/plugin-vscode/src/index.ts b/cli/src/plugins/plugin-vscode/index.ts similarity index 100% rename from packages/plugin-vscode/src/index.ts rename to cli/src/plugins/plugin-vscode/index.ts diff --git a/packages/plugin-warp-ide/src/WarpIDEOutputPlugin.test.ts b/cli/src/plugins/plugin-warp-ide/WarpIDEOutputPlugin.test.ts similarity index 100% rename from packages/plugin-warp-ide/src/WarpIDEOutputPlugin.test.ts rename to cli/src/plugins/plugin-warp-ide/WarpIDEOutputPlugin.test.ts diff --git a/packages/plugin-warp-ide/src/WarpIDEOutputPlugin.ts b/cli/src/plugins/plugin-warp-ide/WarpIDEOutputPlugin.ts similarity index 100% rename from packages/plugin-warp-ide/src/WarpIDEOutputPlugin.ts rename to cli/src/plugins/plugin-warp-ide/WarpIDEOutputPlugin.ts diff --git a/packages/plugin-warp-ide/src/index.ts b/cli/src/plugins/plugin-warp-ide/index.ts similarity index 100% rename from packages/plugin-warp-ide/src/index.ts rename to cli/src/plugins/plugin-warp-ide/index.ts diff --git a/packages/plugin-windsurf/src/WindsurfOutputPlugin.projectConfig.test.ts b/cli/src/plugins/plugin-windsurf/WindsurfOutputPlugin.projectConfig.test.ts similarity index 99% rename from packages/plugin-windsurf/src/WindsurfOutputPlugin.projectConfig.test.ts rename to cli/src/plugins/plugin-windsurf/WindsurfOutputPlugin.projectConfig.test.ts index 9344187b..18355b09 100644 --- a/packages/plugin-windsurf/src/WindsurfOutputPlugin.projectConfig.test.ts +++ b/cli/src/plugins/plugin-windsurf/WindsurfOutputPlugin.projectConfig.test.ts @@ -2,7 +2,7 @@ import type {OutputPluginContext} from '@truenine/plugin-shared' import * as fs from 'node:fs' import * as os from 'node:os' import * as path from 'node:path' -import {collectFileNames, createMockProject, createMockRulePrompt} from '@truenine/plugin-shared/testing' +import {collectFileNames, createMockProject, createMockRulePrompt} from '@truenine/plugin-shared' import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest' import {WindsurfOutputPlugin} from './WindsurfOutputPlugin' diff --git a/packages/plugin-windsurf/src/WindsurfOutputPlugin.property.test.ts b/cli/src/plugins/plugin-windsurf/WindsurfOutputPlugin.property.test.ts similarity index 100% rename from packages/plugin-windsurf/src/WindsurfOutputPlugin.property.test.ts rename to cli/src/plugins/plugin-windsurf/WindsurfOutputPlugin.property.test.ts diff --git a/packages/plugin-windsurf/src/WindsurfOutputPlugin.test.ts b/cli/src/plugins/plugin-windsurf/WindsurfOutputPlugin.test.ts similarity index 100% rename from packages/plugin-windsurf/src/WindsurfOutputPlugin.test.ts rename to cli/src/plugins/plugin-windsurf/WindsurfOutputPlugin.test.ts diff --git a/packages/plugin-windsurf/src/WindsurfOutputPlugin.ts b/cli/src/plugins/plugin-windsurf/WindsurfOutputPlugin.ts similarity index 98% rename from packages/plugin-windsurf/src/WindsurfOutputPlugin.ts rename to cli/src/plugins/plugin-windsurf/WindsurfOutputPlugin.ts index 95d82f07..0e140e9f 100644 --- a/packages/plugin-windsurf/src/WindsurfOutputPlugin.ts +++ b/cli/src/plugins/plugin-windsurf/WindsurfOutputPlugin.ts @@ -12,8 +12,7 @@ import {Buffer} from 'node:buffer' import * as fs from 'node:fs' import * as path from 'node:path' import {buildMarkdownWithFrontMatter} from '@truenine/md-compiler/markdown' -import {AbstractOutputPlugin} from '@truenine/plugin-output-shared' -import {applySubSeriesGlobPrefix, filterCommandsByProjectConfig, filterRulesByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared/utils' +import {AbstractOutputPlugin, applySubSeriesGlobPrefix, filterCommandsByProjectConfig, filterRulesByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared' import {FilePathKind, PLUGIN_NAMES} from '@truenine/plugin-shared' const CODEIUM_WINDSURF_DIR = '.codeium/windsurf' diff --git a/packages/plugin-windsurf/src/index.ts b/cli/src/plugins/plugin-windsurf/index.ts similarity index 100% rename from packages/plugin-windsurf/src/index.ts rename to cli/src/plugins/plugin-windsurf/index.ts diff --git a/cli/src/utils/RelativePathFactory.ts b/cli/src/utils/RelativePathFactory.ts index 3e45a8bf..29d6aae5 100644 --- a/cli/src/utils/RelativePathFactory.ts +++ b/cli/src/utils/RelativePathFactory.ts @@ -1,6 +1,6 @@ -import type {RelativePath} from '@truenine/plugin-shared' +import type {RelativePath} from '../plugins/plugin-shared' import * as path from 'node:path' -import {FilePathKind} from '@truenine/plugin-shared' +import {FilePathKind} from '../plugins/plugin-shared' /** * Options for creating a RelativePath diff --git a/cli/src/utils/ResourceUtils.ts b/cli/src/utils/ResourceUtils.ts index 61676088..94677a01 100644 --- a/cli/src/utils/ResourceUtils.ts +++ b/cli/src/utils/ResourceUtils.ts @@ -1,5 +1,5 @@ -import type {SkillResourceCategory} from '@truenine/plugin-shared' -import {SKILL_RESOURCE_BINARY_EXTENSIONS} from '@truenine/plugin-shared' +import type {SkillResourceCategory} from '../plugins/plugin-shared' +import {SKILL_RESOURCE_BINARY_EXTENSIONS} from '../plugins/plugin-shared' /** * Check if a file extension is a binary resource extension. diff --git a/cli/src/utils/WriteHelper.ts b/cli/src/utils/WriteHelper.ts index 085fe43b..61e53916 100644 --- a/cli/src/utils/WriteHelper.ts +++ b/cli/src/utils/WriteHelper.ts @@ -1,13 +1,13 @@ -import type {RelativePath} from '@truenine/plugin-shared' +import type {RelativePath} from '../plugins/plugin-shared' import * as path from 'node:path' -import {createRelativePath} from '@truenine/desk-paths' +import {createRelativePath} from '../plugins/desk-paths' export { type SafeWriteOptions, type SafeWriteResult, writeFileSafe, type WriteLogger -} from '@truenine/desk-paths' // Re-export from desk-paths +} from '../plugins/desk-paths' // Re-export from desk-paths /** * Options for creating a RelativePath for output files diff --git a/cli/src/utils/ruleFilter.ts b/cli/src/utils/ruleFilter.ts index 43cfa4aa..cdaa2ea4 100644 --- a/cli/src/utils/ruleFilter.ts +++ b/cli/src/utils/ruleFilter.ts @@ -1,5 +1,5 @@ -import type {ProjectConfig, RulePrompt} from '@truenine/plugin-shared' -import {matchesSeries, resolveEffectiveIncludeSeries, resolveSubSeries} from '@truenine/plugin-output-shared/utils' +import type {ProjectConfig, RulePrompt} from '../plugins/plugin-shared' +import {matchesSeries, resolveEffectiveIncludeSeries, resolveSubSeries} from '../plugins/plugin-output-shared' function normalizeSubdirPath(subdir: string): string { let normalized = subdir.replaceAll(/\.\/+/g, '') diff --git a/cli/tsconfig.json b/cli/tsconfig.json index c31ab7f9..fc403126 100644 --- a/cli/tsconfig.json +++ b/cli/tsconfig.json @@ -3,24 +3,70 @@ "compilerOptions": { "noUncheckedSideEffectImports": true, "incremental": true, - "composite": false, // Projects - "target": "ESNext", // Language and Environment + "composite": false, + "target": "ESNext", "lib": [ "ESNext" ], "moduleDetection": "force", "useDefineForClassFields": true, - "baseUrl": ".", // Path Mapping - "module": "ESNext", // Module Resolution + "baseUrl": ".", + "module": "ESNext", "moduleResolution": "Bundler", "paths": { "@/*": [ "./src/*" - ] + ], + "@truenine/desk-paths": ["./src/plugins/desk-paths/index.ts"], + "@truenine/desk-paths/*": ["./src/plugins/desk-paths/*"], + "@truenine/plugin-shared": ["./src/plugins/plugin-shared/index.ts"], + "@truenine/plugin-shared/*": ["./src/plugins/plugin-shared/*"], + "@truenine/plugin-output-shared": ["./src/plugins/plugin-output-shared/index.ts"], + "@truenine/plugin-output-shared/*": ["./src/plugins/plugin-output-shared/*"], + "@truenine/plugin-input-shared": ["./src/plugins/plugin-input-shared/index.ts"], + "@truenine/plugin-input-shared/*": ["./src/plugins/plugin-input-shared/*"], + "@truenine/plugin-agentskills-compact": ["./src/plugins/plugin-agentskills-compact/index.ts"], + "@truenine/plugin-agentsmd": ["./src/plugins/plugin-agentsmd/index.ts"], + "@truenine/plugin-antigravity": ["./src/plugins/plugin-antigravity/index.ts"], + "@truenine/plugin-claude-code-cli": ["./src/plugins/plugin-claude-code-cli/index.ts"], + "@truenine/plugin-cursor": ["./src/plugins/plugin-cursor/index.ts"], + "@truenine/plugin-droid-cli": ["./src/plugins/plugin-droid-cli/index.ts"], + "@truenine/plugin-editorconfig": ["./src/plugins/plugin-editorconfig/index.ts"], + "@truenine/plugin-gemini-cli": ["./src/plugins/plugin-gemini-cli/index.ts"], + "@truenine/plugin-git-exclude": ["./src/plugins/plugin-git-exclude/index.ts"], + "@truenine/plugin-input-agentskills": ["./src/plugins/plugin-input-agentskills/index.ts"], + "@truenine/plugin-input-editorconfig": ["./src/plugins/plugin-input-editorconfig/index.ts"], + "@truenine/plugin-input-fast-command": ["./src/plugins/plugin-input-fast-command/index.ts"], + "@truenine/plugin-input-git-exclude": ["./src/plugins/plugin-input-git-exclude/index.ts"], + "@truenine/plugin-input-gitignore": ["./src/plugins/plugin-input-gitignore/index.ts"], + "@truenine/plugin-input-global-memory": ["./src/plugins/plugin-input-global-memory/index.ts"], + "@truenine/plugin-input-jetbrains-config": ["./src/plugins/plugin-input-jetbrains-config/index.ts"], + "@truenine/plugin-input-md-cleanup-effect": ["./src/plugins/plugin-input-md-cleanup-effect/index.ts"], + "@truenine/plugin-input-orphan-cleanup-effect": ["./src/plugins/plugin-input-orphan-cleanup-effect/index.ts"], + "@truenine/plugin-input-project-prompt": ["./src/plugins/plugin-input-project-prompt/index.ts"], + "@truenine/plugin-input-readme": ["./src/plugins/plugin-input-readme/index.ts"], + "@truenine/plugin-input-rule": ["./src/plugins/plugin-input-rule/index.ts"], + "@truenine/plugin-input-shadow-project": ["./src/plugins/plugin-input-shadow-project/index.ts"], + "@truenine/plugin-input-shared-ignore": ["./src/plugins/plugin-input-shared-ignore/index.ts"], + "@truenine/plugin-input-skill-sync-effect": ["./src/plugins/plugin-input-skill-sync-effect/index.ts"], + "@truenine/plugin-input-subagent": ["./src/plugins/plugin-input-subagent/index.ts"], + "@truenine/plugin-input-vscode-config": ["./src/plugins/plugin-input-vscode-config/index.ts"], + "@truenine/plugin-input-workspace": ["./src/plugins/plugin-input-workspace/index.ts"], + "@truenine/plugin-jetbrains-ai-codex": ["./src/plugins/plugin-jetbrains-ai-codex/index.ts"], + "@truenine/plugin-jetbrains-codestyle": ["./src/plugins/plugin-jetbrains-codestyle/index.ts"], + "@truenine/plugin-openai-codex-cli": ["./src/plugins/plugin-openai-codex-cli/index.ts"], + "@truenine/plugin-opencode-cli": ["./src/plugins/plugin-opencode-cli/index.ts"], + "@truenine/plugin-qoder-ide": ["./src/plugins/plugin-qoder-ide/index.ts"], + "@truenine/plugin-readme": ["./src/plugins/plugin-readme/index.ts"], + "@truenine/plugin-trae-ide": ["./src/plugins/plugin-trae-ide/index.ts"], + "@truenine/plugin-vscode": ["./src/plugins/plugin-vscode/index.ts"], + "@truenine/plugin-warp-ide": ["./src/plugins/plugin-warp-ide/index.ts"], + "@truenine/plugin-windsurf": ["./src/plugins/plugin-windsurf/index.ts"], + "@truenine/config": ["./src/config/index.ts"] }, "resolveJsonModule": true, "allowImportingTsExtensions": true, - "strict": true, // Type Checking - Maximum Strictness + "strict": true, "strictBindCallApply": true, "strictFunctionTypes": true, "strictNullChecks": true, @@ -39,7 +85,7 @@ "noUnusedLocals": true, "noUnusedParameters": true, "useUnknownInCatchVariables": true, - "declaration": true, // Emit + "declaration": true, "declarationMap": true, "importHelpers": true, "newLine": "lf", @@ -49,11 +95,11 @@ "sourceMap": true, "stripInternal": true, "allowSyntheticDefaultImports": true, - "esModuleInterop": true, // Interop Constraints + "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, "verbatimModuleSyntax": true, - "skipLibCheck": true // Completeness + "skipLibCheck": true }, "include": [ "src/**/*", diff --git a/cli/tsconfig.lib.json b/cli/tsconfig.lib.json index b2449b37..5597f4de 100644 --- a/cli/tsconfig.lib.json +++ b/cli/tsconfig.lib.json @@ -3,14 +3,15 @@ "extends": "./tsconfig.json", "compilerOptions": { "composite": true, - "rootDir": "./src", + "rootDir": ".", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, "include": [ "src/**/*", - "env.d.ts" + "env.d.ts", + "tsdown.config.ts" ], "exclude": [ "../node_modules", diff --git a/cli/tsdown.config.ts b/cli/tsdown.config.ts index f5e144e3..69b9cd37 100644 --- a/cli/tsdown.config.ts +++ b/cli/tsdown.config.ts @@ -1,12 +1,65 @@ -import {readFileSync, writeFileSync} from 'node:fs' +import {readFileSync} from 'node:fs' import {resolve} from 'node:path' import {bundles} from '@truenine/init-bundle' import {defineConfig} from 'tsdown' -import {TNMSC_JSON_SCHEMA} from './src/schema.ts' const pkg = JSON.parse(readFileSync('./package.json', 'utf8')) as {version: string, name: string} const kiroGlobalPowersRegistry = bundles['public/kiro_global_powers_registry.json']?.content ?? '{"version":"1.0.0","powers":{},"repoSources":{}}' +const pluginAliases: Record = { + '@truenine/desk-paths': resolve('src/plugins/desk-paths/index.ts'), + '@truenine/plugin-shared': resolve('src/plugins/plugin-shared/index.ts'), + '@truenine/plugin-output-shared': resolve('src/plugins/plugin-output-shared/index.ts'), + '@truenine/plugin-input-shared': resolve('src/plugins/plugin-input-shared/index.ts'), + '@truenine/plugin-agentskills-compact': resolve('src/plugins/plugin-agentskills-compact/index.ts'), + '@truenine/plugin-agentsmd': resolve('src/plugins/plugin-agentsmd/index.ts'), + '@truenine/plugin-antigravity': resolve('src/plugins/plugin-antigravity/index.ts'), + '@truenine/plugin-claude-code-cli': resolve('src/plugins/plugin-claude-code-cli/index.ts'), + '@truenine/plugin-cursor': resolve('src/plugins/plugin-cursor/index.ts'), + '@truenine/plugin-droid-cli': resolve('src/plugins/plugin-droid-cli/index.ts'), + '@truenine/plugin-editorconfig': resolve('src/plugins/plugin-editorconfig/index.ts'), + '@truenine/plugin-gemini-cli': resolve('src/plugins/plugin-gemini-cli/index.ts'), + '@truenine/plugin-git-exclude': resolve('src/plugins/plugin-git-exclude/index.ts'), + '@truenine/plugin-input-agentskills': resolve('src/plugins/plugin-input-agentskills/index.ts'), + '@truenine/plugin-input-editorconfig': resolve('src/plugins/plugin-input-editorconfig/index.ts'), + '@truenine/plugin-input-fast-command': resolve('src/plugins/plugin-input-fast-command/index.ts'), + '@truenine/plugin-input-git-exclude': resolve('src/plugins/plugin-input-git-exclude/index.ts'), + '@truenine/plugin-input-gitignore': resolve('src/plugins/plugin-input-gitignore/index.ts'), + '@truenine/plugin-input-global-memory': resolve('src/plugins/plugin-input-global-memory/index.ts'), + '@truenine/plugin-input-jetbrains-config': resolve('src/plugins/plugin-input-jetbrains-config/index.ts'), + '@truenine/plugin-input-md-cleanup-effect': resolve('src/plugins/plugin-input-md-cleanup-effect/index.ts'), + '@truenine/plugin-input-orphan-cleanup-effect': resolve('src/plugins/plugin-input-orphan-cleanup-effect/index.ts'), + '@truenine/plugin-input-project-prompt': resolve('src/plugins/plugin-input-project-prompt/index.ts'), + '@truenine/plugin-input-readme': resolve('src/plugins/plugin-input-readme/index.ts'), + '@truenine/plugin-input-rule': resolve('src/plugins/plugin-input-rule/index.ts'), + '@truenine/plugin-input-shadow-project': resolve('src/plugins/plugin-input-shadow-project/index.ts'), + '@truenine/plugin-input-shared-ignore': resolve('src/plugins/plugin-input-shared-ignore/index.ts'), + '@truenine/plugin-input-skill-sync-effect': resolve('src/plugins/plugin-input-skill-sync-effect/index.ts'), + '@truenine/plugin-input-subagent': resolve('src/plugins/plugin-input-subagent/index.ts'), + '@truenine/plugin-input-vscode-config': resolve('src/plugins/plugin-input-vscode-config/index.ts'), + '@truenine/plugin-input-workspace': resolve('src/plugins/plugin-input-workspace/index.ts'), + '@truenine/plugin-jetbrains-ai-codex': resolve('src/plugins/plugin-jetbrains-ai-codex/index.ts'), + '@truenine/plugin-jetbrains-codestyle': resolve('src/plugins/plugin-jetbrains-codestyle/index.ts'), + '@truenine/plugin-openai-codex-cli': resolve('src/plugins/plugin-openai-codex-cli/index.ts'), + '@truenine/plugin-opencode-cli': resolve('src/plugins/plugin-opencode-cli/index.ts'), + '@truenine/plugin-qoder-ide': resolve('src/plugins/plugin-qoder-ide/index.ts'), + '@truenine/plugin-readme': resolve('src/plugins/plugin-readme/index.ts'), + '@truenine/plugin-trae-ide': resolve('src/plugins/plugin-trae-ide/index.ts'), + '@truenine/plugin-vscode': resolve('src/plugins/plugin-vscode/index.ts'), + '@truenine/plugin-warp-ide': resolve('src/plugins/plugin-warp-ide/index.ts'), + '@truenine/plugin-windsurf': resolve('src/plugins/plugin-windsurf/index.ts'), + '@truenine/config': resolve('src/config/index.ts') +} + +const noExternalDeps = [ + '@truenine/logger', + 'fast-glob', + '@truenine/desk-paths', + '@truenine/init-bundle', + '@truenine/md-compiler', + ...Object.keys(pluginAliases) +] + export default defineConfig([ { entry: ['./src/index.ts', '!**/*.{spec,test}.*'], @@ -15,15 +68,10 @@ export default defineConfig([ unbundle: false, inlineOnly: false, alias: { - '@': resolve('src') + '@': resolve('src'), + ...pluginAliases }, - noExternal: [ - '@truenine/logger', - 'fast-glob', - '@truenine/desk-paths', - '@truenine/init-bundle', - '@truenine/md-compiler' - ], + noExternal: noExternalDeps, format: ['esm', 'cjs'], minify: true, dts: false, @@ -32,11 +80,6 @@ export default defineConfig([ __CLI_VERSION__: JSON.stringify(pkg.version), __CLI_PACKAGE_NAME__: JSON.stringify(pkg.name), __KIRO_GLOBAL_POWERS_REGISTRY__: kiroGlobalPowersRegistry - }, - hooks: { - 'build:done'() { - writeFileSync('./dist/tnmsc.schema.json', `${JSON.stringify(TNMSC_JSON_SCHEMA, null, 2)}\n`, 'utf8') - } } }, { @@ -46,15 +89,10 @@ export default defineConfig([ unbundle: false, inlineOnly: false, alias: { - '@': resolve('src') + '@': resolve('src'), + ...pluginAliases }, - noExternal: [ - '@truenine/logger', - 'fast-glob', - '@truenine/desk-paths', - '@truenine/init-bundle', - '@truenine/md-compiler' - ], + noExternal: noExternalDeps, format: ['esm'], minify: true, dts: false, @@ -69,7 +107,8 @@ export default defineConfig([ platform: 'node', sourcemap: false, alias: { - '@': resolve('src') + '@': resolve('src'), + ...pluginAliases }, format: ['esm', 'cjs'], minify: false, diff --git a/cli/vite.config.ts b/cli/vite.config.ts index afe89a5b..891d70bf 100644 --- a/cli/vite.config.ts +++ b/cli/vite.config.ts @@ -1,4 +1,5 @@ import {readFileSync} from 'node:fs' +import {resolve} from 'node:path' import {fileURLToPath, URL} from 'node:url' import {bundles} from '@truenine/init-bundle' import {defineConfig} from 'vite' @@ -6,10 +7,61 @@ import {defineConfig} from 'vite' const pkg = JSON.parse(readFileSync('./package.json', 'utf8')) as {version: string, name: string} const kiroGlobalPowersRegistry = bundles['public/kiro_global_powers_registry.json']?.content ?? '{"version":"1.0.0","powers":{},"repoSources":{}}' +const pluginAliases: Record = { + '@truenine/desk-paths': resolve('src/plugins/desk-paths/index.ts'), + '@truenine/plugin-shared': resolve('src/plugins/plugin-shared/index.ts'), + '@truenine/plugin-shared/types': resolve('src/plugins/plugin-shared/types/index.ts'), + '@truenine/plugin-shared/testing': resolve('src/plugins/plugin-shared/testing/index.ts'), + '@truenine/plugin-output-shared': resolve('src/plugins/plugin-output-shared/index.ts'), + '@truenine/plugin-output-shared/utils': resolve('src/plugins/plugin-output-shared/utils/index.ts'), + '@truenine/plugin-output-shared/registry': resolve('src/plugins/plugin-output-shared/registry/index.ts'), + '@truenine/plugin-input-shared': resolve('src/plugins/plugin-input-shared/index.ts'), + '@truenine/plugin-input-shared/scope': resolve('src/plugins/plugin-input-shared/scope/index.ts'), + '@truenine/plugin-agentskills-compact': resolve('src/plugins/plugin-agentskills-compact/index.ts'), + '@truenine/plugin-agentsmd': resolve('src/plugins/plugin-agentsmd/index.ts'), + '@truenine/plugin-antigravity': resolve('src/plugins/plugin-antigravity/index.ts'), + '@truenine/plugin-claude-code-cli': resolve('src/plugins/plugin-claude-code-cli/index.ts'), + '@truenine/plugin-cursor': resolve('src/plugins/plugin-cursor/index.ts'), + '@truenine/plugin-droid-cli': resolve('src/plugins/plugin-droid-cli/index.ts'), + '@truenine/plugin-editorconfig': resolve('src/plugins/plugin-editorconfig/index.ts'), + '@truenine/plugin-gemini-cli': resolve('src/plugins/plugin-gemini-cli/index.ts'), + '@truenine/plugin-git-exclude': resolve('src/plugins/plugin-git-exclude/index.ts'), + '@truenine/plugin-input-agentskills': resolve('src/plugins/plugin-input-agentskills/index.ts'), + '@truenine/plugin-input-editorconfig': resolve('src/plugins/plugin-input-editorconfig/index.ts'), + '@truenine/plugin-input-fast-command': resolve('src/plugins/plugin-input-fast-command/index.ts'), + '@truenine/plugin-input-git-exclude': resolve('src/plugins/plugin-input-git-exclude/index.ts'), + '@truenine/plugin-input-gitignore': resolve('src/plugins/plugin-input-gitignore/index.ts'), + '@truenine/plugin-input-global-memory': resolve('src/plugins/plugin-input-global-memory/index.ts'), + '@truenine/plugin-input-jetbrains-config': resolve('src/plugins/plugin-input-jetbrains-config/index.ts'), + '@truenine/plugin-input-md-cleanup-effect': resolve('src/plugins/plugin-input-md-cleanup-effect/index.ts'), + '@truenine/plugin-input-orphan-cleanup-effect': resolve('src/plugins/plugin-input-orphan-cleanup-effect/index.ts'), + '@truenine/plugin-input-project-prompt': resolve('src/plugins/plugin-input-project-prompt/index.ts'), + '@truenine/plugin-input-readme': resolve('src/plugins/plugin-input-readme/index.ts'), + '@truenine/plugin-input-rule': resolve('src/plugins/plugin-input-rule/index.ts'), + '@truenine/plugin-input-shadow-project': resolve('src/plugins/plugin-input-shadow-project/index.ts'), + '@truenine/plugin-input-shared-ignore': resolve('src/plugins/plugin-input-shared-ignore/index.ts'), + '@truenine/plugin-input-skill-sync-effect': resolve('src/plugins/plugin-input-skill-sync-effect/index.ts'), + '@truenine/plugin-input-subagent': resolve('src/plugins/plugin-input-subagent/index.ts'), + '@truenine/plugin-input-vscode-config': resolve('src/plugins/plugin-input-vscode-config/index.ts'), + '@truenine/plugin-input-workspace': resolve('src/plugins/plugin-input-workspace/index.ts'), + '@truenine/plugin-jetbrains-ai-codex': resolve('src/plugins/plugin-jetbrains-ai-codex/index.ts'), + '@truenine/plugin-jetbrains-codestyle': resolve('src/plugins/plugin-jetbrains-codestyle/index.ts'), + '@truenine/plugin-openai-codex-cli': resolve('src/plugins/plugin-openai-codex-cli/index.ts'), + '@truenine/plugin-opencode-cli': resolve('src/plugins/plugin-opencode-cli/index.ts'), + '@truenine/plugin-qoder-ide': resolve('src/plugins/plugin-qoder-ide/index.ts'), + '@truenine/plugin-readme': resolve('src/plugins/plugin-readme/index.ts'), + '@truenine/plugin-trae-ide': resolve('src/plugins/plugin-trae-ide/index.ts'), + '@truenine/plugin-vscode': resolve('src/plugins/plugin-vscode/index.ts'), + '@truenine/plugin-warp-ide': resolve('src/plugins/plugin-warp-ide/index.ts'), + '@truenine/plugin-windsurf': resolve('src/plugins/plugin-windsurf/index.ts'), + '@truenine/config': resolve('src/config/index.ts') +} + export default defineConfig({ resolve: { alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) + '@': fileURLToPath(new URL('./src', import.meta.url)), + ...pluginAliases } }, define: { diff --git a/cli/vitest.config.ts b/cli/vitest.config.ts index bd344383..482bee96 100644 --- a/cli/vitest.config.ts +++ b/cli/vitest.config.ts @@ -15,8 +15,8 @@ export default mergeConfig( enabled: true, tsconfig: './tsconfig.test.json' }, - testTimeout: 30000, // Property-based tests run more iterations - onConsoleLog: () => false, // Minimal output: suppress console logs, show summary only + testTimeout: 30000, + onConsoleLog: () => false, coverage: { provider: 'v8', reporter: ['text', 'json', 'html'], diff --git a/doc/package.json b/doc/package.json index f25f7984..d8dfad86 100644 --- a/doc/package.json +++ b/doc/package.json @@ -1,6 +1,6 @@ { "name": "@truenine/memory-sync-docs", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "private": true, "description": "Documentation site for @truenine/memory-sync, built with Next.js 16 and MDX.", "engines": { diff --git a/gui/package.json b/gui/package.json index 64347e30..9da7b6bd 100644 --- a/gui/package.json +++ b/gui/package.json @@ -1,6 +1,6 @@ { "name": "@truenine/memory-sync-gui", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "private": true, "engines": { "node": ">=25.2.1", diff --git a/gui/src-tauri/Cargo.toml b/gui/src-tauri/Cargo.toml index 41902044..6b792606 100644 --- a/gui/src-tauri/Cargo.toml +++ b/gui/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "memory-sync-gui" -version = "2026.10224.10619" +version = "2026.10302.10037" description = "Memory Sync desktop GUI application" authors.workspace = true edition.workspace = true diff --git a/gui/src-tauri/tauri.conf.json b/gui/src-tauri/tauri.conf.json index 7c57a2c3..a28261d8 100644 --- a/gui/src-tauri/tauri.conf.json +++ b/gui/src-tauri/tauri.conf.json @@ -1,6 +1,6 @@ { "$schema": "https://schema.tauri.app/config/2", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "productName": "Memory Sync", "identifier": "org.truenine.memory-sync", "build": { diff --git a/libraries/config/package.json b/libraries/config/package.json index cb46744b..069c7917 100644 --- a/libraries/config/package.json +++ b/libraries/config/package.json @@ -1,7 +1,7 @@ { "name": "@truenine/config", "type": "module", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "private": true, "description": "Rust-powered configuration loader for Node.js", "license": "AGPL-3.0-only", diff --git a/libraries/init-bundle/package.json b/libraries/init-bundle/package.json index 7cad7f79..12c2c339 100644 --- a/libraries/init-bundle/package.json +++ b/libraries/init-bundle/package.json @@ -1,7 +1,7 @@ { "name": "@truenine/init-bundle", "type": "module", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "private": true, "description": "Rust-powered embedded file templates for tnmsc init command", "license": "AGPL-3.0-only", diff --git a/libraries/init-bundle/public/public/tnmsc.example.json b/libraries/init-bundle/public/public/tnmsc.example.json index 42a69e4c..8ecaebd5 100644 --- a/libraries/init-bundle/public/public/tnmsc.example.json +++ b/libraries/init-bundle/public/public/tnmsc.example.json @@ -1,6 +1,6 @@ { "$schema": "https://unpkg.com/@truenine/memory-sync-cli/dist/tnmsc.schema.json", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "workspaceDir": "~/project", "shadowSourceProject": { "name": "tnmsc-shadow", diff --git a/libraries/input-plugins/package.json b/libraries/input-plugins/package.json index 409f767a..80a5320b 100644 --- a/libraries/input-plugins/package.json +++ b/libraries/input-plugins/package.json @@ -1,7 +1,7 @@ { "name": "@truenine/input-plugins", "type": "module", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "private": true, "description": "Rust-powered input plugins for tnmsc pipeline (stub)", "license": "AGPL-3.0-only", diff --git a/libraries/logger/package.json b/libraries/logger/package.json index 998e3612..9bb361a9 100644 --- a/libraries/logger/package.json +++ b/libraries/logger/package.json @@ -1,7 +1,7 @@ { "name": "@truenine/logger", "type": "module", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "private": true, "description": "Rust-powered structured logger for Node.js with pure-TS fallback", "license": "AGPL-3.0-only", diff --git a/libraries/md-compiler/package.json b/libraries/md-compiler/package.json index ff35c08e..4b8185dc 100644 --- a/libraries/md-compiler/package.json +++ b/libraries/md-compiler/package.json @@ -1,7 +1,7 @@ { "name": "@truenine/md-compiler", "type": "module", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "private": true, "description": "Rust-powered MDX→Markdown compiler for Node.js with pure-TS fallback", "license": "AGPL-3.0-only", diff --git a/package.json b/package.json index e11f51ac..962bc478 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@truenine/memory-sync", - "version": "2026.10224.10619", + "version": "2026.10302.10037", "description": "Cross-AI-tool prompt synchronisation toolkit (CLI + Tauri desktop GUI) — one ruleset, multi-target adaptation. Monorepo powered by pnpm + Turbo.", "license": "AGPL-3.0-only", "keywords": [ diff --git a/packages/desk-paths/eslint.config.ts b/packages/desk-paths/eslint.config.ts deleted file mode 100644 index 13a6c4cf..00000000 --- a/packages/desk-paths/eslint.config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' - -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: { - allowDefaultProject: true - } - }, - ignores: [ - '.turbo/**', - 'aindex/**', - '*.md', - '**/*.md', - '.kiro/**', - '.claude/**', - '.factory/**', - 'src/AGENTS.md', - 'public/**', - '.skills/**', - '**/.skills/**', - '.agent/**' - ] -}) - -export default config as unknown diff --git a/packages/desk-paths/package.json b/packages/desk-paths/package.json deleted file mode 100644 index ba611149..00000000 --- a/packages/desk-paths/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "@truenine/desk-paths", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": {} -} diff --git a/packages/desk-paths/tsconfig.eslint.json b/packages/desk-paths/tsconfig.eslint.json deleted file mode 100644 index 585b38ee..00000000 --- a/packages/desk-paths/tsconfig.eslint.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true, - "skipLibCheck": true - }, - "include": [ - "src/**/*.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "env.d.ts", - "eslint.config.ts", - "tsdown.config.ts", - "vite.config.ts", - "vitest.config.ts" - ], - "exclude": [ - "../node_modules", - "dist", - "coverage" - ] -} diff --git a/packages/desk-paths/tsconfig.json b/packages/desk-paths/tsconfig.json deleted file mode 100644 index c31ab7f9..00000000 --- a/packages/desk-paths/tsconfig.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, // Projects - "target": "ESNext", // Language and Environment - "lib": [ - "ESNext" - ], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", // Path Mapping - "module": "ESNext", // Module Resolution - "moduleResolution": "Bundler", - "paths": { - "@/*": [ - "./src/*" - ] - }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, // Type Checking - Maximum Strictness - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, // Emit - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, // Interop Constraints - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true // Completeness - }, - "include": [ - "src/**/*", - "env.d.ts", - "eslint.config.ts", - "tsdown.config.ts", - "vite.config.ts", - "vitest.config.ts" - ], - "exclude": [ - "../node_modules", - "dist" - ] -} diff --git a/packages/desk-paths/tsconfig.lib.json b/packages/desk-paths/tsconfig.lib.json deleted file mode 100644 index b2449b37..00000000 --- a/packages/desk-paths/tsconfig.lib.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "noEmit": false, - "outDir": "../dist", - "skipLibCheck": true - }, - "include": [ - "src/**/*", - "env.d.ts" - ], - "exclude": [ - "../node_modules", - "dist", - "**/*.spec.ts", - "**/*.test.ts" - ] -} diff --git a/packages/desk-paths/tsconfig.test.json b/packages/desk-paths/tsconfig.test.json deleted file mode 100644 index 65c3c9ad..00000000 --- a/packages/desk-paths/tsconfig.test.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "lib": [ - "ESNext", - "DOM" - ], - "types": [ - "vitest/globals", - "node" - ] - }, - "include": [ - "src/**/*.spec.ts", - "src/**/*.test.ts", - "vitest.config.ts", - "vite.config.ts", - "env.d.ts" - ], - "exclude": [ - "../node_modules", - "dist" - ] -} diff --git a/packages/desk-paths/tsdown.config.ts b/packages/desk-paths/tsdown.config.ts deleted file mode 100644 index 5cfddf9a..00000000 --- a/packages/desk-paths/tsdown.config.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: { - '@': resolve('src') - }, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/desk-paths/vite.config.ts b/packages/desk-paths/vite.config.ts deleted file mode 100644 index 2dcc5646..00000000 --- a/packages/desk-paths/vite.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) - } - } -}) diff --git a/packages/desk-paths/vitest.config.ts b/packages/desk-paths/vitest.config.ts deleted file mode 100644 index bd344383..00000000 --- a/packages/desk-paths/vitest.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {fileURLToPath} from 'node:url' - -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' - -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: { - enabled: true, - tsconfig: './tsconfig.test.json' - }, - testTimeout: 30000, // Property-based tests run more iterations - onConsoleLog: () => false, // Minimal output: suppress console logs, show summary only - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: [ - 'node_modules/', - 'dist/', - '**/*.test.ts', - '**/*.property.test.ts' - ] - } - } - }) -) diff --git a/packages/plugin-agentskills-compact/eslint.config.ts b/packages/plugin-agentskills-compact/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-agentskills-compact/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-agentskills-compact/package.json b/packages/plugin-agentskills-compact/package.json deleted file mode 100644 index db8b9d5d..00000000 --- a/packages/plugin-agentskills-compact/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-agentskills-compact", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Generic Agent Skills (compact) output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-agentskills-compact/tsconfig.eslint.json b/packages/plugin-agentskills-compact/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-agentskills-compact/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-agentskills-compact/tsconfig.json b/packages/plugin-agentskills-compact/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-agentskills-compact/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-agentskills-compact/tsconfig.lib.json b/packages/plugin-agentskills-compact/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-agentskills-compact/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-agentskills-compact/tsconfig.test.json b/packages/plugin-agentskills-compact/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-agentskills-compact/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-agentskills-compact/tsdown.config.ts b/packages/plugin-agentskills-compact/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-agentskills-compact/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-agentskills-compact/vite.config.ts b/packages/plugin-agentskills-compact/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-agentskills-compact/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-agentskills-compact/vitest.config.ts b/packages/plugin-agentskills-compact/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-agentskills-compact/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-agentsmd/eslint.config.ts b/packages/plugin-agentsmd/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-agentsmd/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-agentsmd/package.json b/packages/plugin-agentsmd/package.json deleted file mode 100644 index 1971b60f..00000000 --- a/packages/plugin-agentsmd/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-agentsmd", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "AGENTS.md output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-agentsmd/tsconfig.eslint.json b/packages/plugin-agentsmd/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-agentsmd/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-agentsmd/tsconfig.json b/packages/plugin-agentsmd/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-agentsmd/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-agentsmd/tsconfig.lib.json b/packages/plugin-agentsmd/tsconfig.lib.json deleted file mode 100644 index 73898d16..00000000 --- a/packages/plugin-agentsmd/tsconfig.lib.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "noEmit": false, - "outDir": "../dist", - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-agentsmd/tsconfig.test.json b/packages/plugin-agentsmd/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-agentsmd/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-agentsmd/tsdown.config.ts b/packages/plugin-agentsmd/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-agentsmd/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-agentsmd/vite.config.ts b/packages/plugin-agentsmd/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-agentsmd/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-agentsmd/vitest.config.ts b/packages/plugin-agentsmd/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-agentsmd/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-antigravity/eslint.config.ts b/packages/plugin-antigravity/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-antigravity/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-antigravity/package.json b/packages/plugin-antigravity/package.json deleted file mode 100644 index 8bc2d0ae..00000000 --- a/packages/plugin-antigravity/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-antigravity", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Antigravity output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-antigravity/tsconfig.eslint.json b/packages/plugin-antigravity/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-antigravity/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-antigravity/tsconfig.json b/packages/plugin-antigravity/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-antigravity/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-antigravity/tsconfig.lib.json b/packages/plugin-antigravity/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-antigravity/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-antigravity/tsconfig.test.json b/packages/plugin-antigravity/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-antigravity/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-antigravity/tsdown.config.ts b/packages/plugin-antigravity/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-antigravity/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-antigravity/vite.config.ts b/packages/plugin-antigravity/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-antigravity/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-antigravity/vitest.config.ts b/packages/plugin-antigravity/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-antigravity/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-claude-code-cli/eslint.config.ts b/packages/plugin-claude-code-cli/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-claude-code-cli/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-claude-code-cli/package.json b/packages/plugin-claude-code-cli/package.json deleted file mode 100644 index 3894daf8..00000000 --- a/packages/plugin-claude-code-cli/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-claude-code-cli", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Claude Code CLI output plugin", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-claude-code-cli/tsconfig.eslint.json b/packages/plugin-claude-code-cli/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-claude-code-cli/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-claude-code-cli/tsconfig.json b/packages/plugin-claude-code-cli/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-claude-code-cli/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-claude-code-cli/tsconfig.lib.json b/packages/plugin-claude-code-cli/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-claude-code-cli/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-claude-code-cli/tsconfig.test.json b/packages/plugin-claude-code-cli/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-claude-code-cli/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-claude-code-cli/tsdown.config.ts b/packages/plugin-claude-code-cli/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-claude-code-cli/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-claude-code-cli/vite.config.ts b/packages/plugin-claude-code-cli/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-claude-code-cli/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-claude-code-cli/vitest.config.ts b/packages/plugin-claude-code-cli/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-claude-code-cli/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-cursor/eslint.config.ts b/packages/plugin-cursor/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-cursor/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-cursor/package.json b/packages/plugin-cursor/package.json deleted file mode 100644 index 8854dfee..00000000 --- a/packages/plugin-cursor/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@truenine/plugin-cursor", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Cursor IDE output plugin", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "picomatch": "catalog:" - } -} diff --git a/packages/plugin-cursor/tsconfig.eslint.json b/packages/plugin-cursor/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-cursor/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-cursor/tsconfig.json b/packages/plugin-cursor/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-cursor/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-cursor/tsconfig.lib.json b/packages/plugin-cursor/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-cursor/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-cursor/tsconfig.test.json b/packages/plugin-cursor/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-cursor/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-cursor/tsdown.config.ts b/packages/plugin-cursor/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-cursor/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-cursor/vite.config.ts b/packages/plugin-cursor/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-cursor/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-cursor/vitest.config.ts b/packages/plugin-cursor/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-cursor/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-droid-cli/eslint.config.ts b/packages/plugin-droid-cli/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-droid-cli/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-droid-cli/package.json b/packages/plugin-droid-cli/package.json deleted file mode 100644 index 54d145d5..00000000 --- a/packages/plugin-droid-cli/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-droid-cli", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Droid CLI output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-droid-cli/tsconfig.eslint.json b/packages/plugin-droid-cli/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-droid-cli/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-droid-cli/tsconfig.json b/packages/plugin-droid-cli/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-droid-cli/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-droid-cli/tsconfig.lib.json b/packages/plugin-droid-cli/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-droid-cli/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-droid-cli/tsconfig.test.json b/packages/plugin-droid-cli/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-droid-cli/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-droid-cli/tsdown.config.ts b/packages/plugin-droid-cli/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-droid-cli/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-droid-cli/vite.config.ts b/packages/plugin-droid-cli/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-droid-cli/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-droid-cli/vitest.config.ts b/packages/plugin-droid-cli/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-droid-cli/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-editorconfig/eslint.config.ts b/packages/plugin-editorconfig/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-editorconfig/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-editorconfig/package.json b/packages/plugin-editorconfig/package.json deleted file mode 100644 index a39cba88..00000000 --- a/packages/plugin-editorconfig/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-editorconfig", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "EditorConfig output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-editorconfig/tsconfig.eslint.json b/packages/plugin-editorconfig/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-editorconfig/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-editorconfig/tsconfig.json b/packages/plugin-editorconfig/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-editorconfig/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-editorconfig/tsconfig.lib.json b/packages/plugin-editorconfig/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-editorconfig/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-editorconfig/tsconfig.test.json b/packages/plugin-editorconfig/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-editorconfig/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-editorconfig/tsdown.config.ts b/packages/plugin-editorconfig/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-editorconfig/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-editorconfig/vite.config.ts b/packages/plugin-editorconfig/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-editorconfig/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-editorconfig/vitest.config.ts b/packages/plugin-editorconfig/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-editorconfig/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-gemini-cli/eslint.config.ts b/packages/plugin-gemini-cli/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-gemini-cli/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-gemini-cli/package.json b/packages/plugin-gemini-cli/package.json deleted file mode 100644 index 4fa7e2d2..00000000 --- a/packages/plugin-gemini-cli/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-gemini-cli", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Gemini CLI output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-gemini-cli/tsconfig.eslint.json b/packages/plugin-gemini-cli/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-gemini-cli/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-gemini-cli/tsconfig.json b/packages/plugin-gemini-cli/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-gemini-cli/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-gemini-cli/tsconfig.lib.json b/packages/plugin-gemini-cli/tsconfig.lib.json deleted file mode 100644 index 73898d16..00000000 --- a/packages/plugin-gemini-cli/tsconfig.lib.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "noEmit": false, - "outDir": "../dist", - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-gemini-cli/tsconfig.test.json b/packages/plugin-gemini-cli/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-gemini-cli/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-gemini-cli/tsdown.config.ts b/packages/plugin-gemini-cli/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-gemini-cli/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-gemini-cli/vite.config.ts b/packages/plugin-gemini-cli/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-gemini-cli/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-gemini-cli/vitest.config.ts b/packages/plugin-gemini-cli/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-gemini-cli/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-git-exclude/eslint.config.ts b/packages/plugin-git-exclude/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-git-exclude/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-git-exclude/package.json b/packages/plugin-git-exclude/package.json deleted file mode 100644 index 5253d280..00000000 --- a/packages/plugin-git-exclude/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-git-exclude", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Git exclude output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-git-exclude/tsconfig.eslint.json b/packages/plugin-git-exclude/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-git-exclude/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-git-exclude/tsconfig.json b/packages/plugin-git-exclude/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-git-exclude/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-git-exclude/tsconfig.lib.json b/packages/plugin-git-exclude/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-git-exclude/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-git-exclude/tsconfig.test.json b/packages/plugin-git-exclude/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-git-exclude/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-git-exclude/tsdown.config.ts b/packages/plugin-git-exclude/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-git-exclude/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-git-exclude/vite.config.ts b/packages/plugin-git-exclude/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-git-exclude/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-git-exclude/vitest.config.ts b/packages/plugin-git-exclude/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-git-exclude/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-agentskills/eslint.config.ts b/packages/plugin-input-agentskills/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-agentskills/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-agentskills/package.json b/packages/plugin-input-agentskills/package.json deleted file mode 100644 index a8139911..00000000 --- a/packages/plugin-input-agentskills/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-agentskills", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-agentskills for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-agentskills/tsconfig.eslint.json b/packages/plugin-input-agentskills/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-agentskills/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-agentskills/tsconfig.json b/packages/plugin-input-agentskills/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-agentskills/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-agentskills/tsconfig.lib.json b/packages/plugin-input-agentskills/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-agentskills/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-agentskills/tsconfig.test.json b/packages/plugin-input-agentskills/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-agentskills/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-agentskills/tsdown.config.ts b/packages/plugin-input-agentskills/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-agentskills/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-agentskills/vite.config.ts b/packages/plugin-input-agentskills/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-agentskills/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-agentskills/vitest.config.ts b/packages/plugin-input-agentskills/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-agentskills/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-editorconfig/eslint.config.ts b/packages/plugin-input-editorconfig/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-editorconfig/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-editorconfig/package.json b/packages/plugin-input-editorconfig/package.json deleted file mode 100644 index 0d7a08bb..00000000 --- a/packages/plugin-input-editorconfig/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-input-editorconfig", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-editorconfig for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-editorconfig/tsconfig.eslint.json b/packages/plugin-input-editorconfig/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-editorconfig/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-editorconfig/tsconfig.json b/packages/plugin-input-editorconfig/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-editorconfig/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-editorconfig/tsconfig.lib.json b/packages/plugin-input-editorconfig/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-editorconfig/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-editorconfig/tsconfig.test.json b/packages/plugin-input-editorconfig/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-editorconfig/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-editorconfig/tsdown.config.ts b/packages/plugin-input-editorconfig/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-editorconfig/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-editorconfig/vite.config.ts b/packages/plugin-input-editorconfig/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-editorconfig/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-editorconfig/vitest.config.ts b/packages/plugin-input-editorconfig/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-editorconfig/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-fast-command/eslint.config.ts b/packages/plugin-input-fast-command/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-fast-command/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-fast-command/package.json b/packages/plugin-input-fast-command/package.json deleted file mode 100644 index bb9b683c..00000000 --- a/packages/plugin-input-fast-command/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-fast-command", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-fast-command for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-fast-command/tsconfig.eslint.json b/packages/plugin-input-fast-command/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-fast-command/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-fast-command/tsconfig.json b/packages/plugin-input-fast-command/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-fast-command/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-fast-command/tsconfig.lib.json b/packages/plugin-input-fast-command/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-fast-command/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-fast-command/tsconfig.test.json b/packages/plugin-input-fast-command/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-fast-command/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-fast-command/tsdown.config.ts b/packages/plugin-input-fast-command/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-fast-command/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-fast-command/vite.config.ts b/packages/plugin-input-fast-command/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-fast-command/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-fast-command/vitest.config.ts b/packages/plugin-input-fast-command/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-fast-command/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-git-exclude/eslint.config.ts b/packages/plugin-input-git-exclude/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-git-exclude/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-git-exclude/package.json b/packages/plugin-input-git-exclude/package.json deleted file mode 100644 index 4772baa6..00000000 --- a/packages/plugin-input-git-exclude/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-input-git-exclude", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-git-exclude for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-git-exclude/tsconfig.eslint.json b/packages/plugin-input-git-exclude/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-git-exclude/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-git-exclude/tsconfig.json b/packages/plugin-input-git-exclude/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-git-exclude/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-git-exclude/tsconfig.lib.json b/packages/plugin-input-git-exclude/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-git-exclude/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-git-exclude/tsconfig.test.json b/packages/plugin-input-git-exclude/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-git-exclude/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-git-exclude/tsdown.config.ts b/packages/plugin-input-git-exclude/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-git-exclude/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-git-exclude/vite.config.ts b/packages/plugin-input-git-exclude/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-git-exclude/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-git-exclude/vitest.config.ts b/packages/plugin-input-git-exclude/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-git-exclude/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-gitignore/eslint.config.ts b/packages/plugin-input-gitignore/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-gitignore/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-gitignore/package.json b/packages/plugin-input-gitignore/package.json deleted file mode 100644 index d93458f8..00000000 --- a/packages/plugin-input-gitignore/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-gitignore", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-gitignore for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/init-bundle": "workspace:*", - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-gitignore/tsconfig.eslint.json b/packages/plugin-input-gitignore/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-gitignore/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-gitignore/tsconfig.json b/packages/plugin-input-gitignore/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-gitignore/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-gitignore/tsconfig.lib.json b/packages/plugin-input-gitignore/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-gitignore/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-gitignore/tsconfig.test.json b/packages/plugin-input-gitignore/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-gitignore/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-gitignore/tsdown.config.ts b/packages/plugin-input-gitignore/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-gitignore/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-gitignore/vite.config.ts b/packages/plugin-input-gitignore/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-gitignore/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-gitignore/vitest.config.ts b/packages/plugin-input-gitignore/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-gitignore/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-global-memory/eslint.config.ts b/packages/plugin-input-global-memory/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-global-memory/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-global-memory/package.json b/packages/plugin-input-global-memory/package.json deleted file mode 100644 index 6b556e6f..00000000 --- a/packages/plugin-input-global-memory/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-global-memory", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-global-memory for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-global-memory/tsconfig.eslint.json b/packages/plugin-input-global-memory/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-global-memory/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-global-memory/tsconfig.json b/packages/plugin-input-global-memory/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-global-memory/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-global-memory/tsconfig.lib.json b/packages/plugin-input-global-memory/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-global-memory/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-global-memory/tsconfig.test.json b/packages/plugin-input-global-memory/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-global-memory/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-global-memory/tsdown.config.ts b/packages/plugin-input-global-memory/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-global-memory/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-global-memory/vite.config.ts b/packages/plugin-input-global-memory/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-global-memory/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-global-memory/vitest.config.ts b/packages/plugin-input-global-memory/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-global-memory/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-jetbrains-config/eslint.config.ts b/packages/plugin-input-jetbrains-config/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-jetbrains-config/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-jetbrains-config/package.json b/packages/plugin-input-jetbrains-config/package.json deleted file mode 100644 index 31cd8175..00000000 --- a/packages/plugin-input-jetbrains-config/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-input-jetbrains-config", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-jetbrains-config for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-jetbrains-config/tsconfig.eslint.json b/packages/plugin-input-jetbrains-config/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-jetbrains-config/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-jetbrains-config/tsconfig.json b/packages/plugin-input-jetbrains-config/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-jetbrains-config/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-jetbrains-config/tsconfig.lib.json b/packages/plugin-input-jetbrains-config/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-jetbrains-config/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-jetbrains-config/tsconfig.test.json b/packages/plugin-input-jetbrains-config/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-jetbrains-config/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-jetbrains-config/tsdown.config.ts b/packages/plugin-input-jetbrains-config/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-jetbrains-config/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-jetbrains-config/vite.config.ts b/packages/plugin-input-jetbrains-config/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-jetbrains-config/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-jetbrains-config/vitest.config.ts b/packages/plugin-input-jetbrains-config/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-jetbrains-config/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-md-cleanup-effect/eslint.config.ts b/packages/plugin-input-md-cleanup-effect/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-md-cleanup-effect/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-md-cleanup-effect/package.json b/packages/plugin-input-md-cleanup-effect/package.json deleted file mode 100644 index dc654995..00000000 --- a/packages/plugin-input-md-cleanup-effect/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-md-cleanup-effect", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-md-cleanup-effect for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "fast-glob": "catalog:" - } -} diff --git a/packages/plugin-input-md-cleanup-effect/tsconfig.eslint.json b/packages/plugin-input-md-cleanup-effect/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-md-cleanup-effect/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-md-cleanup-effect/tsconfig.json b/packages/plugin-input-md-cleanup-effect/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-md-cleanup-effect/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-md-cleanup-effect/tsconfig.lib.json b/packages/plugin-input-md-cleanup-effect/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-md-cleanup-effect/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-md-cleanup-effect/tsconfig.test.json b/packages/plugin-input-md-cleanup-effect/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-md-cleanup-effect/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-md-cleanup-effect/tsdown.config.ts b/packages/plugin-input-md-cleanup-effect/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-md-cleanup-effect/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-md-cleanup-effect/vite.config.ts b/packages/plugin-input-md-cleanup-effect/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-md-cleanup-effect/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-md-cleanup-effect/vitest.config.ts b/packages/plugin-input-md-cleanup-effect/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-md-cleanup-effect/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-orphan-cleanup-effect/eslint.config.ts b/packages/plugin-input-orphan-cleanup-effect/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-orphan-cleanup-effect/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-orphan-cleanup-effect/package.json b/packages/plugin-input-orphan-cleanup-effect/package.json deleted file mode 100644 index 40af636c..00000000 --- a/packages/plugin-input-orphan-cleanup-effect/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-orphan-cleanup-effect", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-orphan-cleanup-effect for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "fast-glob": "catalog:" - } -} diff --git a/packages/plugin-input-orphan-cleanup-effect/tsconfig.eslint.json b/packages/plugin-input-orphan-cleanup-effect/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-orphan-cleanup-effect/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-orphan-cleanup-effect/tsconfig.json b/packages/plugin-input-orphan-cleanup-effect/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-orphan-cleanup-effect/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-orphan-cleanup-effect/tsconfig.lib.json b/packages/plugin-input-orphan-cleanup-effect/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-orphan-cleanup-effect/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-orphan-cleanup-effect/tsconfig.test.json b/packages/plugin-input-orphan-cleanup-effect/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-orphan-cleanup-effect/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-orphan-cleanup-effect/tsdown.config.ts b/packages/plugin-input-orphan-cleanup-effect/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-orphan-cleanup-effect/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-orphan-cleanup-effect/vite.config.ts b/packages/plugin-input-orphan-cleanup-effect/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-orphan-cleanup-effect/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-orphan-cleanup-effect/vitest.config.ts b/packages/plugin-input-orphan-cleanup-effect/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-orphan-cleanup-effect/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-project-prompt/eslint.config.ts b/packages/plugin-input-project-prompt/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-project-prompt/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-project-prompt/package.json b/packages/plugin-input-project-prompt/package.json deleted file mode 100644 index 9bc52d97..00000000 --- a/packages/plugin-input-project-prompt/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-project-prompt", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-project-prompt for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-project-prompt/tsconfig.eslint.json b/packages/plugin-input-project-prompt/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-project-prompt/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-project-prompt/tsconfig.json b/packages/plugin-input-project-prompt/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-project-prompt/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-project-prompt/tsconfig.lib.json b/packages/plugin-input-project-prompt/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-project-prompt/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-project-prompt/tsconfig.test.json b/packages/plugin-input-project-prompt/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-project-prompt/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-project-prompt/tsdown.config.ts b/packages/plugin-input-project-prompt/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-project-prompt/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-project-prompt/vite.config.ts b/packages/plugin-input-project-prompt/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-project-prompt/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-project-prompt/vitest.config.ts b/packages/plugin-input-project-prompt/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-project-prompt/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-readme/eslint.config.ts b/packages/plugin-input-readme/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-readme/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-readme/package.json b/packages/plugin-input-readme/package.json deleted file mode 100644 index 85191734..00000000 --- a/packages/plugin-input-readme/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-readme", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-readme for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-readme/tsconfig.eslint.json b/packages/plugin-input-readme/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-readme/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-readme/tsconfig.json b/packages/plugin-input-readme/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-readme/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-readme/tsconfig.lib.json b/packages/plugin-input-readme/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-readme/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-readme/tsconfig.test.json b/packages/plugin-input-readme/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-readme/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-readme/tsdown.config.ts b/packages/plugin-input-readme/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-readme/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-readme/vite.config.ts b/packages/plugin-input-readme/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-readme/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-readme/vitest.config.ts b/packages/plugin-input-readme/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-readme/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-rule/eslint.config.ts b/packages/plugin-input-rule/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-rule/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-rule/package.json b/packages/plugin-input-rule/package.json deleted file mode 100644 index fd207bd8..00000000 --- a/packages/plugin-input-rule/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-rule", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-rule for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-rule/tsconfig.eslint.json b/packages/plugin-input-rule/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-rule/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-rule/tsconfig.json b/packages/plugin-input-rule/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-rule/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-rule/tsconfig.lib.json b/packages/plugin-input-rule/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-rule/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-rule/tsconfig.test.json b/packages/plugin-input-rule/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-rule/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-rule/tsdown.config.ts b/packages/plugin-input-rule/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-rule/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-rule/vite.config.ts b/packages/plugin-input-rule/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-rule/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-rule/vitest.config.ts b/packages/plugin-input-rule/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-rule/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-shadow-project/eslint.config.ts b/packages/plugin-input-shadow-project/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-shadow-project/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-shadow-project/package.json b/packages/plugin-input-shadow-project/package.json deleted file mode 100644 index ddbbdec3..00000000 --- a/packages/plugin-input-shadow-project/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-shadow-project", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-shadow-project for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "jsonc-parser": "catalog:" - } -} diff --git a/packages/plugin-input-shadow-project/tsconfig.eslint.json b/packages/plugin-input-shadow-project/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-shadow-project/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-shadow-project/tsconfig.json b/packages/plugin-input-shadow-project/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-shadow-project/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-shadow-project/tsconfig.lib.json b/packages/plugin-input-shadow-project/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-shadow-project/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-shadow-project/tsconfig.test.json b/packages/plugin-input-shadow-project/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-shadow-project/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-shadow-project/tsdown.config.ts b/packages/plugin-input-shadow-project/tsdown.config.ts deleted file mode 100644 index 1e0a730b..00000000 --- a/packages/plugin-input-shadow-project/tsdown.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false}, - external: ['jsonc-parser'] - } -]) diff --git a/packages/plugin-input-shadow-project/vite.config.ts b/packages/plugin-input-shadow-project/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-shadow-project/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-shadow-project/vitest.config.ts b/packages/plugin-input-shadow-project/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-shadow-project/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-shared-ignore/eslint.config.ts b/packages/plugin-input-shared-ignore/eslint.config.ts deleted file mode 100644 index 12cc00fc..00000000 --- a/packages/plugin-input-shared-ignore/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-shared-ignore/package.json b/packages/plugin-input-shared-ignore/package.json deleted file mode 100644 index 83497c82..00000000 --- a/packages/plugin-input-shared-ignore/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-input-shared-ignore", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "AI agent ignore file input plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run --passWithNoTests", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-shared-ignore/tsconfig.json b/packages/plugin-input-shared-ignore/tsconfig.json deleted file mode 100644 index 6ccdd2ab..00000000 --- a/packages/plugin-input-shared-ignore/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "eslint.config.ts", "tsdown.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-shared-ignore/tsconfig.lib.json b/packages/plugin-input-shared-ignore/tsconfig.lib.json deleted file mode 100644 index 2a3b86e2..00000000 --- a/packages/plugin-input-shared-ignore/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-shared-ignore/tsdown.config.ts b/packages/plugin-input-shared-ignore/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-shared-ignore/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-shared/eslint.config.ts b/packages/plugin-input-shared/eslint.config.ts deleted file mode 100644 index 2b7b269c..00000000 --- a/packages/plugin-input-shared/eslint.config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' - -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: { - allowDefaultProject: true - } - }, - ignores: [ - '.turbo/**', - '*.md', - '**/*.md' - ] -}) - -export default config as unknown diff --git a/packages/plugin-input-shared/package.json b/packages/plugin-input-shared/package.json deleted file mode 100644 index e1e0f0be..00000000 --- a/packages/plugin-input-shared/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@truenine/plugin-input-shared", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Shared abstract base classes and scope management for memory-sync input plugins", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - }, - "./scope": { - "types": "./dist/scope/index.d.mts", - "import": "./dist/scope/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "fast-glob": "catalog:" - } -} diff --git a/packages/plugin-input-shared/tsconfig.eslint.json b/packages/plugin-input-shared/tsconfig.eslint.json deleted file mode 100644 index 585b38ee..00000000 --- a/packages/plugin-input-shared/tsconfig.eslint.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true, - "skipLibCheck": true - }, - "include": [ - "src/**/*.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "env.d.ts", - "eslint.config.ts", - "tsdown.config.ts", - "vite.config.ts", - "vitest.config.ts" - ], - "exclude": [ - "../node_modules", - "dist", - "coverage" - ] -} diff --git a/packages/plugin-input-shared/tsconfig.json b/packages/plugin-input-shared/tsconfig.json deleted file mode 100644 index 03cd50a3..00000000 --- a/packages/plugin-input-shared/tsconfig.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": [ - "ESNext" - ], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { - "@/*": [ - "./src/*" - ] - }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": [ - "src/**/*", - "env.d.ts", - "eslint.config.ts", - "tsdown.config.ts", - "vite.config.ts", - "vitest.config.ts" - ], - "exclude": [ - "../node_modules", - "dist" - ] -} diff --git a/packages/plugin-input-shared/tsconfig.lib.json b/packages/plugin-input-shared/tsconfig.lib.json deleted file mode 100644 index b2449b37..00000000 --- a/packages/plugin-input-shared/tsconfig.lib.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "noEmit": false, - "outDir": "../dist", - "skipLibCheck": true - }, - "include": [ - "src/**/*", - "env.d.ts" - ], - "exclude": [ - "../node_modules", - "dist", - "**/*.spec.ts", - "**/*.test.ts" - ] -} diff --git a/packages/plugin-input-shared/tsconfig.test.json b/packages/plugin-input-shared/tsconfig.test.json deleted file mode 100644 index 65c3c9ad..00000000 --- a/packages/plugin-input-shared/tsconfig.test.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "lib": [ - "ESNext", - "DOM" - ], - "types": [ - "vitest/globals", - "node" - ] - }, - "include": [ - "src/**/*.spec.ts", - "src/**/*.test.ts", - "vitest.config.ts", - "vite.config.ts", - "env.d.ts" - ], - "exclude": [ - "../node_modules", - "dist" - ] -} diff --git a/packages/plugin-input-shared/tsdown.config.ts b/packages/plugin-input-shared/tsdown.config.ts deleted file mode 100644 index 2261026f..00000000 --- a/packages/plugin-input-shared/tsdown.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: [ - './src/index.ts', - './src/scope/index.ts', - '!**/*.{spec,test}.*' - ], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: { - '@': resolve('src') - }, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-shared/vite.config.ts b/packages/plugin-input-shared/vite.config.ts deleted file mode 100644 index 2dcc5646..00000000 --- a/packages/plugin-input-shared/vite.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) - } - } -}) diff --git a/packages/plugin-input-shared/vitest.config.ts b/packages/plugin-input-shared/vitest.config.ts deleted file mode 100644 index a06eb3a7..00000000 --- a/packages/plugin-input-shared/vitest.config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {fileURLToPath} from 'node:url' - -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' - -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: { - enabled: true, - tsconfig: './tsconfig.test.json' - }, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: [ - 'node_modules/', - 'dist/', - '**/*.test.ts', - '**/*.property.test.ts' - ] - } - } - }) -) diff --git a/packages/plugin-input-skill-sync-effect/eslint.config.ts b/packages/plugin-input-skill-sync-effect/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-skill-sync-effect/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-skill-sync-effect/package.json b/packages/plugin-input-skill-sync-effect/package.json deleted file mode 100644 index f5ea92ed..00000000 --- a/packages/plugin-input-skill-sync-effect/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-skill-sync-effect", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-skill-sync-effect for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "fast-glob": "catalog:" - } -} diff --git a/packages/plugin-input-skill-sync-effect/tsconfig.eslint.json b/packages/plugin-input-skill-sync-effect/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-skill-sync-effect/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-skill-sync-effect/tsconfig.json b/packages/plugin-input-skill-sync-effect/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-skill-sync-effect/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-skill-sync-effect/tsconfig.lib.json b/packages/plugin-input-skill-sync-effect/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-skill-sync-effect/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-skill-sync-effect/tsconfig.test.json b/packages/plugin-input-skill-sync-effect/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-skill-sync-effect/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-skill-sync-effect/tsdown.config.ts b/packages/plugin-input-skill-sync-effect/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-skill-sync-effect/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-skill-sync-effect/vite.config.ts b/packages/plugin-input-skill-sync-effect/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-skill-sync-effect/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-skill-sync-effect/vitest.config.ts b/packages/plugin-input-skill-sync-effect/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-skill-sync-effect/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-subagent/eslint.config.ts b/packages/plugin-input-subagent/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-subagent/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-subagent/package.json b/packages/plugin-input-subagent/package.json deleted file mode 100644 index ae4b9c74..00000000 --- a/packages/plugin-input-subagent/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-input-subagent", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-subagent for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-subagent/tsconfig.eslint.json b/packages/plugin-input-subagent/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-subagent/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-subagent/tsconfig.json b/packages/plugin-input-subagent/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-subagent/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-subagent/tsconfig.lib.json b/packages/plugin-input-subagent/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-subagent/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-subagent/tsconfig.test.json b/packages/plugin-input-subagent/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-subagent/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-subagent/tsdown.config.ts b/packages/plugin-input-subagent/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-subagent/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-subagent/vite.config.ts b/packages/plugin-input-subagent/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-subagent/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-subagent/vitest.config.ts b/packages/plugin-input-subagent/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-subagent/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-vscode-config/eslint.config.ts b/packages/plugin-input-vscode-config/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-vscode-config/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-vscode-config/package.json b/packages/plugin-input-vscode-config/package.json deleted file mode 100644 index 8c804656..00000000 --- a/packages/plugin-input-vscode-config/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-input-vscode-config", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-vscode-config for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-vscode-config/tsconfig.eslint.json b/packages/plugin-input-vscode-config/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-vscode-config/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-vscode-config/tsconfig.json b/packages/plugin-input-vscode-config/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-vscode-config/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-vscode-config/tsconfig.lib.json b/packages/plugin-input-vscode-config/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-vscode-config/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-vscode-config/tsconfig.test.json b/packages/plugin-input-vscode-config/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-vscode-config/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-vscode-config/tsdown.config.ts b/packages/plugin-input-vscode-config/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-vscode-config/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-vscode-config/vite.config.ts b/packages/plugin-input-vscode-config/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-vscode-config/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-vscode-config/vitest.config.ts b/packages/plugin-input-vscode-config/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-vscode-config/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-input-workspace/eslint.config.ts b/packages/plugin-input-workspace/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-input-workspace/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-input-workspace/package.json b/packages/plugin-input-workspace/package.json deleted file mode 100644 index f99f8dba..00000000 --- a/packages/plugin-input-workspace/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-input-workspace", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "plugin-input-workspace for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-input-workspace/tsconfig.eslint.json b/packages/plugin-input-workspace/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-input-workspace/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-input-workspace/tsconfig.json b/packages/plugin-input-workspace/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-input-workspace/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-workspace/tsconfig.lib.json b/packages/plugin-input-workspace/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-input-workspace/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-input-workspace/tsconfig.test.json b/packages/plugin-input-workspace/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-input-workspace/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-input-workspace/tsdown.config.ts b/packages/plugin-input-workspace/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-input-workspace/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-input-workspace/vite.config.ts b/packages/plugin-input-workspace/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-input-workspace/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-input-workspace/vitest.config.ts b/packages/plugin-input-workspace/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-input-workspace/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-jetbrains-ai-codex/eslint.config.ts b/packages/plugin-jetbrains-ai-codex/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-jetbrains-ai-codex/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-jetbrains-ai-codex/package.json b/packages/plugin-jetbrains-ai-codex/package.json deleted file mode 100644 index cb4aabd5..00000000 --- a/packages/plugin-jetbrains-ai-codex/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@truenine/plugin-jetbrains-ai-codex", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "JetBrains AI Assistant Codex output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/desk-paths": "workspace:*", - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-jetbrains-ai-codex/tsconfig.eslint.json b/packages/plugin-jetbrains-ai-codex/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-jetbrains-ai-codex/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-jetbrains-ai-codex/tsconfig.json b/packages/plugin-jetbrains-ai-codex/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-jetbrains-ai-codex/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-jetbrains-ai-codex/tsconfig.lib.json b/packages/plugin-jetbrains-ai-codex/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-jetbrains-ai-codex/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-jetbrains-ai-codex/tsconfig.test.json b/packages/plugin-jetbrains-ai-codex/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-jetbrains-ai-codex/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-jetbrains-ai-codex/tsdown.config.ts b/packages/plugin-jetbrains-ai-codex/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-jetbrains-ai-codex/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-jetbrains-ai-codex/vite.config.ts b/packages/plugin-jetbrains-ai-codex/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-jetbrains-ai-codex/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-jetbrains-ai-codex/vitest.config.ts b/packages/plugin-jetbrains-ai-codex/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-jetbrains-ai-codex/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-jetbrains-codestyle/eslint.config.ts b/packages/plugin-jetbrains-codestyle/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-jetbrains-codestyle/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-jetbrains-codestyle/package.json b/packages/plugin-jetbrains-codestyle/package.json deleted file mode 100644 index f21fffda..00000000 --- a/packages/plugin-jetbrains-codestyle/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-jetbrains-codestyle", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "JetBrains IDE code style config output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-jetbrains-codestyle/tsconfig.eslint.json b/packages/plugin-jetbrains-codestyle/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-jetbrains-codestyle/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-jetbrains-codestyle/tsconfig.json b/packages/plugin-jetbrains-codestyle/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-jetbrains-codestyle/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-jetbrains-codestyle/tsconfig.lib.json b/packages/plugin-jetbrains-codestyle/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-jetbrains-codestyle/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-jetbrains-codestyle/tsconfig.test.json b/packages/plugin-jetbrains-codestyle/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-jetbrains-codestyle/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-jetbrains-codestyle/tsdown.config.ts b/packages/plugin-jetbrains-codestyle/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-jetbrains-codestyle/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-jetbrains-codestyle/vite.config.ts b/packages/plugin-jetbrains-codestyle/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-jetbrains-codestyle/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-jetbrains-codestyle/vitest.config.ts b/packages/plugin-jetbrains-codestyle/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-jetbrains-codestyle/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-kiro-ide/env.d.ts b/packages/plugin-kiro-ide/env.d.ts deleted file mode 100644 index 202c8664..00000000 --- a/packages/plugin-kiro-ide/env.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare const __KIRO_GLOBAL_POWERS_REGISTRY__: string | undefined diff --git a/packages/plugin-kiro-ide/eslint.config.ts b/packages/plugin-kiro-ide/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-kiro-ide/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-kiro-ide/package.json b/packages/plugin-kiro-ide/package.json deleted file mode 100644 index 344a4ec0..00000000 --- a/packages/plugin-kiro-ide/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@truenine/plugin-kiro-ide", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Kiro IDE output plugin", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "picomatch": "catalog:" - } -} diff --git a/packages/plugin-kiro-ide/src/KiroCLIOutputPlugin.projectConfig.test.ts b/packages/plugin-kiro-ide/src/KiroCLIOutputPlugin.projectConfig.test.ts deleted file mode 100644 index ba3cc19f..00000000 --- a/packages/plugin-kiro-ide/src/KiroCLIOutputPlugin.projectConfig.test.ts +++ /dev/null @@ -1,199 +0,0 @@ -import type {OutputPluginContext} from '@truenine/plugin-shared' -import * as fs from 'node:fs' -import * as os from 'node:os' -import * as path from 'node:path' -import {collectFileNames, createMockProject, createMockRulePrompt} from '@truenine/plugin-shared/testing' -import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest' -import {KiroCLIOutputPlugin} from './KiroCLIOutputPlugin' - -class TestableKiroCLIOutputPlugin extends KiroCLIOutputPlugin { - private mockHomeDir: string | null = null - - public setMockHomeDir(dir: string | null): void { - this.mockHomeDir = dir - } - - protected override getHomeDir(): string { - if (this.mockHomeDir != null) return this.mockHomeDir - return super.getHomeDir() - } -} - -function createMockContext( - tempDir: string, - rules: unknown[], - projects: unknown[] -): OutputPluginContext { - return { - collectedInputContext: { - workspace: { - projects: projects as never, - directory: { - pathKind: 1, - path: tempDir, - basePath: tempDir, - getDirectoryName: () => 'workspace', - getAbsolutePath: () => tempDir - } - }, - ideConfigFiles: [], - rules: rules as never, - fastCommands: [], - skills: [], - globalMemory: void 0, - aiAgentIgnoreConfigFiles: [] - }, - logger: { - debug: vi.fn(), - trace: vi.fn(), - info: vi.fn(), - warn: vi.fn(), - error: vi.fn() - } as never, - fs, - path, - glob: vi.fn() as never - } -} - -describe('kiroCLIOutputPlugin - projectConfig filtering', () => { - let tempDir: string, - plugin: TestableKiroCLIOutputPlugin - - beforeEach(() => { - tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kiro-proj-config-test-')) - plugin = new TestableKiroCLIOutputPlugin() - plugin.setMockHomeDir(tempDir) - }) - - afterEach(() => { - try { - fs.rmSync(tempDir, {recursive: true, force: true}) - } - catch {} - }) - - describe('registerProjectOutputFiles', () => { - it('should include all project rules when no projectConfig', async () => { - const rules = [ - createMockRulePrompt('test', 'rule1', 'uniapp', 'project'), - createMockRulePrompt('test', 'rule2', 'vue', 'project') - ] - const projects = [createMockProject('proj1', tempDir, 'proj1')] - const ctx = createMockContext(tempDir, rules, projects) - - const results = await plugin.registerProjectOutputFiles(ctx) - const fileNames = collectFileNames(results) - - expect(fileNames).toContain('rule-test-rule1.md') - expect(fileNames).toContain('rule-test-rule2.md') - }) - - it('should filter rules by include in projectConfig', async () => { - const rules = [ - createMockRulePrompt('test', 'rule1', 'uniapp', 'project'), - createMockRulePrompt('test', 'rule2', 'vue', 'project') - ] - const projects = [ - createMockProject('proj1', tempDir, 'proj1', {rules: {includeSeries: ['uniapp']}}) - ] - const ctx = createMockContext(tempDir, rules, projects) - - const results = await plugin.registerProjectOutputFiles(ctx) - const fileNames = collectFileNames(results) - - expect(fileNames).toContain('rule-test-rule1.md') - expect(fileNames).not.toContain('rule-test-rule2.md') - }) - - it('should filter rules by includeSeries excluding non-matching series', async () => { - const rules = [ - createMockRulePrompt('test', 'rule1', 'uniapp', 'project'), - createMockRulePrompt('test', 'rule2', 'vue', 'project') - ] - const projects = [ - createMockProject('proj1', tempDir, 'proj1', {rules: {includeSeries: ['vue']}}) - ] - const ctx = createMockContext(tempDir, rules, projects) - - const results = await plugin.registerProjectOutputFiles(ctx) - const fileNames = collectFileNames(results) - - expect(fileNames).not.toContain('rule-test-rule1.md') - expect(fileNames).toContain('rule-test-rule2.md') - }) - - it('should include rules without seriName regardless of include filter', async () => { - const rules = [ - createMockRulePrompt('test', 'rule1', void 0, 'project'), - createMockRulePrompt('test', 'rule2', 'vue', 'project') - ] - const projects = [ - createMockProject('proj1', tempDir, 'proj1', {rules: {includeSeries: ['uniapp']}}) - ] - const ctx = createMockContext(tempDir, rules, projects) - - const results = await plugin.registerProjectOutputFiles(ctx) - const fileNames = collectFileNames(results) - - expect(fileNames).toContain('rule-test-rule1.md') - expect(fileNames).not.toContain('rule-test-rule2.md') - }) - - it('should filter independently for each project', async () => { - const rules = [ - createMockRulePrompt('test', 'rule1', 'uniapp', 'project'), - createMockRulePrompt('test', 'rule2', 'vue', 'project') - ] - const projects = [ - createMockProject('proj1', tempDir, 'proj1', {rules: {includeSeries: ['uniapp']}}), - createMockProject('proj2', tempDir, 'proj2', {rules: {includeSeries: ['vue']}}) - ] - const ctx = createMockContext(tempDir, rules, projects) - - const results = await plugin.registerProjectOutputFiles(ctx) - const fileNames = results.map(r => ({ - path: r.path, - fileName: r.path.split(/[/\\]/).pop() - })) - - expect(fileNames.some(f => f.path.includes('proj1') && f.fileName === 'rule-test-rule1.md')).toBe(true) - expect(fileNames.some(f => f.path.includes('proj1') && f.fileName === 'rule-test-rule2.md')).toBe(false) - expect(fileNames.some(f => f.path.includes('proj2') && f.fileName === 'rule-test-rule2.md')).toBe(true) - expect(fileNames.some(f => f.path.includes('proj2') && f.fileName === 'rule-test-rule1.md')).toBe(false) - }) - - it('should return empty when include matches nothing', async () => { - const rules = [ - createMockRulePrompt('test', 'rule1', 'uniapp', 'project') - ] - const projects = [ - createMockProject('proj1', tempDir, 'proj1', {rules: {includeSeries: ['react']}}) - ] - const ctx = createMockContext(tempDir, rules, projects) - - const results = await plugin.registerProjectOutputFiles(ctx) - const ruleFiles = results.filter(r => r.path.includes('rule-')) - - expect(ruleFiles).toHaveLength(0) - }) - }) - - describe('writeProjectOutputs', () => { - it('should write only filtered rules to each project', async () => { - const rules = [ - createMockRulePrompt('test', 'rule1', 'uniapp', 'project'), - createMockRulePrompt('test', 'rule2', 'vue', 'project') - ] - const projects = [ - createMockProject('proj1', tempDir, 'proj1', {rules: {includeSeries: ['uniapp']}}) - ] - const ctx = createMockContext(tempDir, rules, projects) - - const results = await plugin.writeProjectOutputs(ctx) - - expect(results.files.some(f => f.path.path.includes('rule-test-rule1.md'))).toBe(true) - expect(results.files.some(f => f.path.path.includes('rule-test-rule2.md'))).toBe(false) - }) - }) -}) diff --git a/packages/plugin-kiro-ide/src/KiroCLIOutputPlugin.test.ts b/packages/plugin-kiro-ide/src/KiroCLIOutputPlugin.test.ts deleted file mode 100644 index f983ae23..00000000 --- a/packages/plugin-kiro-ide/src/KiroCLIOutputPlugin.test.ts +++ /dev/null @@ -1,766 +0,0 @@ -import type {CollectedInputContext, FastCommandPrompt, OutputPluginContext, RelativePath, SkillYAMLFrontMatter} from '@truenine/plugin-shared' -import * as fs from 'node:fs' -import * as os from 'node:os' -import * as path from 'node:path' -import {FilePathKind, PromptKind} from '@truenine/plugin-shared' -import * as fc from 'fast-check' -import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest' -import {KiroCLIOutputPlugin} from './KiroCLIOutputPlugin' - -function createMockRelativePath(pathStr: string, basePath: string): RelativePath { - return { - pathKind: FilePathKind.Relative, - path: pathStr, - basePath, - getDirectoryName: () => pathStr, - getAbsolutePath: () => `${basePath}/${pathStr}` - } -} - -function createMockFastCommandPrompt( - series: string | undefined, - commandName: string -): FastCommandPrompt { - return { - type: PromptKind.FastCommand, - series, - commandName, - content: '', - length: 0, - filePathKind: FilePathKind.Relative, - dir: createMockRelativePath('.', '/test'), - markdownContents: [] - } as FastCommandPrompt -} - -class TestableKiroCLIOutputPlugin extends KiroCLIOutputPlugin { // Create a testable subclass to expose private methods - private mockHomeDir: string | null = null - - public testBuildFastCommandSteeringFileName(cmd: FastCommandPrompt): string { - return (this as any).buildFastCommandSteeringFileName(cmd) // Access private method via any cast - } - - public testBuildPowerFrontMatter(frontMatter: SkillYAMLFrontMatter): string { - return (this as any).buildPowerFrontMatter(frontMatter) // Access private method via any cast - } - - public testBuildSkillFrontMatter(frontMatter: SkillYAMLFrontMatter): string { - return (this as any).buildSkillFrontMatter(frontMatter) // Access private method via any cast - } - - public testListInstalledPowers(powersDir: string): string[] { - return (this as any).listInstalledPowers(powersDir) // Access private method via any cast - } - - public setMockHomeDir(dir: string | null): void { - this.mockHomeDir = dir - } - - protected override getHomeDir(): string { // Override getHomeDir to allow mocking in tests - if (this.mockHomeDir != null) return this.mockHomeDir - return super.getHomeDir() - } -} - -describe('kiroCLIOutputPlugin', () => { - describe('buildFastCommandSteeringFileName', () => { - const alphanumericNoUnderscore = fc.string({minLength: 1, maxLength: 10, unit: 'grapheme-ascii'}) // Generator for alphanumeric strings without underscore (for series prefix) - .filter(s => /^[a-z0-9]+$/i.test(s)) - - const alphanumericCommandName = fc.string({minLength: 1, maxLength: 20, unit: 'grapheme-ascii'}) // Generator for alphanumeric strings (for command name) - .filter(s => /^\w+$/.test(s)) - - it('should use hyphen separator between series and command name', () => { - fc.assert( - fc.property( - alphanumericNoUnderscore, - alphanumericCommandName, - (series, commandName) => { - const plugin = new TestableKiroCLIOutputPlugin() - const cmd = createMockFastCommandPrompt(series, commandName) - - const result = plugin.testBuildFastCommandSteeringFileName(cmd) - - expect(result).toBe(`${series}-${commandName}.md`) // Should use hyphen separator instead of underscore - } - ), - {numRuns: 100} - ) - }) - - it('should return just commandName.md when series is undefined', () => { - fc.assert( - fc.property( - alphanumericCommandName, - commandName => { - const plugin = new TestableKiroCLIOutputPlugin() - const cmd = createMockFastCommandPrompt(void 0, commandName) - - const result = plugin.testBuildFastCommandSteeringFileName(cmd) - - expect(result).toBe(`${commandName}.md`) // Should return just commandName without any prefix - } - ), - {numRuns: 100} - ) - }) - - it('should transform pe_compile to pe-compile.md', () => { // Unit tests for specific examples - const plugin = new TestableKiroCLIOutputPlugin() - const cmd = createMockFastCommandPrompt('pe', 'compile') - - const result = plugin.testBuildFastCommandSteeringFileName(cmd) - - expect(result).toBe('pe-compile.md') - }) - - it('should transform spec_requirement to spec-requirement.md', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const cmd = createMockFastCommandPrompt('spec', 'requirement') - - const result = plugin.testBuildFastCommandSteeringFileName(cmd) - - expect(result).toBe('spec-requirement.md') - }) - - it('should handle command without series', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const cmd = createMockFastCommandPrompt(void 0, 'compile') - - const result = plugin.testBuildFastCommandSteeringFileName(cmd) - - expect(result).toBe('compile.md') - }) - }) - - describe('buildPowerFrontMatter', () => { - it('should include name and description in front matter', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const frontMatter = { - name: 'test-skill', - description: 'A test skill' - } as SkillYAMLFrontMatter - - const result = plugin.testBuildPowerFrontMatter(frontMatter) - - expect(result).toContain('---') - expect(result).toContain('name: test-skill') - expect(result).toContain('description: A test skill') - }) - - it('should include displayName when provided', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const frontMatter = { - name: 'test-skill', - description: 'A test skill', - displayName: 'Test Skill Display' - } as SkillYAMLFrontMatter - - const result = plugin.testBuildPowerFrontMatter(frontMatter) - - expect(result).toContain('displayName: Test Skill Display') - }) - - it('should include keywords array when provided', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const frontMatter = { - name: 'test-skill', - description: 'A test skill', - keywords: ['typescript', 'testing', 'cli'] - } as SkillYAMLFrontMatter - - const result = plugin.testBuildPowerFrontMatter(frontMatter) - - expect(result).toContain('keywords:') // YAML library outputs arrays in block style - expect(result).toContain('- typescript') - expect(result).toContain('- testing') - expect(result).toContain('- cli') - }) - - it('should include author when provided', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const frontMatter = { - name: 'test-skill', - description: 'A test skill', - author: 'Test Author' - } as SkillYAMLFrontMatter - - const result = plugin.testBuildPowerFrontMatter(frontMatter) - - expect(result).toContain('author: Test Author') - }) - - it('should omit optional fields when not provided', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const frontMatter = { - name: 'minimal-skill', - description: '' - } as SkillYAMLFrontMatter - - const result = plugin.testBuildPowerFrontMatter(frontMatter) - - expect(result).not.toContain('displayName') - expect(result).not.toContain('keywords') - expect(result).not.toContain('author') - }) - - it('should produce valid YAML front matter format', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const frontMatter = { - name: 'full-skill', - description: 'Full featured skill', - displayName: 'Full Skill', - keywords: ['feature', 'complete'], - author: 'Developer' - } as SkillYAMLFrontMatter - - const result = plugin.testBuildPowerFrontMatter(frontMatter) - - expect(result.startsWith('---')).toBe(true) - expect(result.endsWith('---')).toBe(true) - - const lines = result.split('\n') // Should have proper line structure - expect(lines[0]).toBe('---') - expect(lines.at(-1)).toBe('---') - }) - }) - - describe('registerGlobalOutputDirs - clean all installed powers', () => { - let tempDir: string - - beforeEach(() => { - tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kiro-test-')) // Create a temporary directory for testing - }) - - afterEach(() => { - if (tempDir && fs.existsSync(tempDir)) fs.rmSync(tempDir, {recursive: true, force: true}) // Clean up temporary directory - }) - - it('should list all installed power directories', () => { - const plugin = new TestableKiroCLIOutputPlugin() - - const powersDir = path.join(tempDir, '.kiro', 'powers', 'installed') // Create mock power directories - fs.mkdirSync(powersDir, {recursive: true}) - fs.mkdirSync(path.join(powersDir, 'power-a')) - fs.mkdirSync(path.join(powersDir, 'power-b')) - fs.mkdirSync(path.join(powersDir, 'old-power')) - - const result = plugin.testListInstalledPowers(powersDir) - - expect(result).toHaveLength(3) - expect(result).toContain('power-a') - expect(result).toContain('power-b') - expect(result).toContain('old-power') - }) - - it('should return empty array when powers directory does not exist', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const nonExistentDir = path.join(tempDir, 'non-existent') - - const result = plugin.testListInstalledPowers(nonExistentDir) - - expect(result).toEqual([]) - }) - - it('should only list directories, not files', () => { - const plugin = new TestableKiroCLIOutputPlugin() - - const powersDir = path.join(tempDir, '.kiro', 'powers', 'installed') // Create mock power directories and files - fs.mkdirSync(powersDir, {recursive: true}) - fs.mkdirSync(path.join(powersDir, 'valid-power')) - fs.writeFileSync(path.join(powersDir, 'not-a-power.txt'), 'content') - - const result = plugin.testListInstalledPowers(powersDir) - - expect(result).toHaveLength(1) - expect(result).toContain('valid-power') - expect(result).not.toContain('not-a-power.txt') - }) - - it('should register all installed powers for cleanup in registerGlobalOutputDirs', async () => { - const plugin = new TestableKiroCLIOutputPlugin() - - const powersDir = path.join(tempDir, '.kiro', 'powers', 'installed') // Create mock power directories - fs.mkdirSync(powersDir, {recursive: true}) - fs.mkdirSync(path.join(powersDir, 'current-skill')) - fs.mkdirSync(path.join(powersDir, 'old-removed-skill')) - fs.mkdirSync(path.join(powersDir, 'renamed-skill')) - - plugin.setMockHomeDir(tempDir) // Mock the home directory to use our temp dir - - const ctx: OutputPluginContext = { // Create a minimal context with no skills (simulating clean after skills removed) - collectedInputContext: { - workspace: { - projects: [] - }, - skills: [] // No current skills - simulating clean after skills removed - } as unknown as CollectedInputContext, - logger: {debug: vi.fn(), trace: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn()} as any, - fs, - path - } - - const result = await plugin.registerGlobalOutputDirs(ctx) - - const powerDirs = result.filter(r => r.basePath.includes('powers') && r.basePath.includes('installed')) // Use path separator agnostic check for cross-platform compatibility // Should include all installed powers, not just current skills - expect(powerDirs).toHaveLength(3) - - const powerNames = powerDirs.map(r => r.path) - expect(powerNames).toContain('current-skill') - expect(powerNames).toContain('old-removed-skill') - expect(powerNames).toContain('renamed-skill') - }) - }) - - describe('mCP configuration output', () => { - let tempDir: string - - beforeEach(() => tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kiro-mcp-test-'))) - - afterEach(() => { - if (tempDir && fs.existsSync(tempDir)) fs.rmSync(tempDir, {recursive: true, force: true}) - }) - - it('should register mcp.json in power directory when skill has MCP config', async () => { - const plugin = new TestableKiroCLIOutputPlugin() - plugin.setMockHomeDir(tempDir) - - const ctx: OutputPluginContext = { - collectedInputContext: { - workspace: {projects: [], directory: {path: tempDir, pathKind: FilePathKind.Absolute, getDirectoryName: () => 'test'}}, - ideConfigFiles: [], - skills: [ - { - type: PromptKind.Skill, - yamlFrontMatter: {name: 'test-skill', description: 'Test'}, - content: '# Test', - length: 6, - filePathKind: FilePathKind.Relative, - dir: createMockRelativePath('test-skill', tempDir), - markdownContents: [], - mcpConfig: { - type: PromptKind.SkillMcpConfig, - mcpServers: { - 'test-server': {command: 'uvx', args: ['test-package']} - }, - rawContent: '{"mcpServers":{"test-server":{"command":"uvx","args":["test-package"]}}}' - } - } - ] - } as unknown as CollectedInputContext, - logger: {debug: vi.fn(), trace: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn()} as any, - fs, - path - } - - const result = await plugin.registerGlobalOutputFiles(ctx) - - const mcpFile = result.find(r => r.path === 'mcp.json') // Should include mcp.json in the power directory - expect(mcpFile).toBeDefined() - expect(mcpFile?.basePath).toMatch(/powers[/\\]installed[/\\]test-skill/) // Use path separator agnostic check for cross-platform compatibility - }) - - it('should not register mcp.json when skill has no MCP config', async () => { - const plugin = new TestableKiroCLIOutputPlugin() - plugin.setMockHomeDir(tempDir) - - const ctx: OutputPluginContext = { - collectedInputContext: { - workspace: {projects: [], directory: {path: tempDir, pathKind: FilePathKind.Absolute, getDirectoryName: () => 'test'}}, - ideConfigFiles: [], - skills: [ - { - type: PromptKind.Skill, - yamlFrontMatter: {name: 'test-skill', description: 'Test'}, - content: '# Test', - length: 6, - filePathKind: FilePathKind.Relative, - dir: createMockRelativePath('test-skill', tempDir), - markdownContents: [] - } // No mcpConfig - ] - } as unknown as CollectedInputContext, - logger: {debug: vi.fn(), trace: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn()} as any, - fs, - path - } - - const result = await plugin.registerGlobalOutputFiles(ctx) - - const mcpFile = result.find(r => r.path === 'mcp.json') // Should NOT include mcp.json - expect(mcpFile).toBeUndefined() - }) - - it('should write mcp.json when calling writeGlobalOutputs with skill that has MCP config', async () => { - const plugin = new TestableKiroCLIOutputPlugin() - plugin.setMockHomeDir(tempDir) - - const powersDir = path.join(tempDir, '.kiro', 'powers', 'installed', 'my-skill') - fs.mkdirSync(powersDir, {recursive: true}) - - const mcpRawContent = JSON.stringify({ - mcpServers: { - 'my-server': {command: 'uvx', args: ['my-package'], env: {KEY: 'value'}} - } - }, null, 2) - - const ctx = { - dryRun: false, - collectedInputContext: { - workspace: {projects: [], directory: {path: tempDir, pathKind: FilePathKind.Absolute, getDirectoryName: () => 'test'}}, - ideConfigFiles: [], - globalMemory: void 0, - fastCommands: [], - skills: [ - { - type: PromptKind.Skill, - yamlFrontMatter: {name: 'my-skill', description: 'My Skill'}, - content: '# My Skill', - length: 10, - filePathKind: FilePathKind.Relative, - dir: createMockRelativePath('my-skill', tempDir), - markdownContents: [], - mcpConfig: { - type: PromptKind.SkillMcpConfig, - mcpServers: { - 'my-server': {command: 'uvx', args: ['my-package'], env: {KEY: 'value'}} - }, - rawContent: mcpRawContent - } - } - ] - }, - logger: {debug: vi.fn(), trace: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn()} as any, - fs, - path, - glob: {} as any - } - - await plugin.writeGlobalOutputs(ctx as any) - - const mcpConfigPath = path.join(powersDir, 'mcp.json') - expect(fs.existsSync(mcpConfigPath)).toBe(true) - const writtenContent = fs.readFileSync(mcpConfigPath, 'utf8') - expect(writtenContent).toBe(mcpRawContent) - }) - - it('should register mcp.json for each skill with MCP config separately', async () => { - const plugin = new TestableKiroCLIOutputPlugin() - plugin.setMockHomeDir(tempDir) - - const ctx: OutputPluginContext = { - collectedInputContext: { - workspace: {projects: [], directory: {path: tempDir, pathKind: FilePathKind.Absolute, getDirectoryName: () => 'test'}}, - ideConfigFiles: [], - skills: [ - { - type: PromptKind.Skill, - yamlFrontMatter: {name: 'skill-a', description: 'Skill A'}, - content: '# Skill A', - length: 9, - filePathKind: FilePathKind.Relative, - dir: createMockRelativePath('skill-a', tempDir), - markdownContents: [], - mcpConfig: { - type: PromptKind.SkillMcpConfig, - mcpServers: {server1: {command: 'cmd1'}}, - rawContent: '{}' - } - }, - { - type: PromptKind.Skill, - yamlFrontMatter: {name: 'skill-b', description: 'Skill B'}, - content: '# Skill B', - length: 9, - filePathKind: FilePathKind.Relative, - dir: createMockRelativePath('skill-b', tempDir), - markdownContents: [], - mcpConfig: { - type: PromptKind.SkillMcpConfig, - mcpServers: {server2: {command: 'cmd2'}}, - rawContent: '{}' - } - }, - { - type: PromptKind.Skill, - yamlFrontMatter: {name: 'skill-c', description: 'Skill C (no MCP)'}, - content: '# Skill C', - length: 9, - filePathKind: FilePathKind.Relative, - dir: createMockRelativePath('skill-c', tempDir), - markdownContents: [] - } // No mcpConfig - ] - } as unknown as CollectedInputContext, - logger: {debug: vi.fn(), trace: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn()} as any, - fs, - path - } - - const result = await plugin.registerGlobalOutputFiles(ctx) - - const mcpFiles = result.filter(r => r.path === 'mcp.json') // Should have mcp.json for skill-a, skill-b (in power dirs), and one global settings/mcp.json - expect(mcpFiles).toHaveLength(3) // 2 power mcp.json + 1 global settings/mcp.json = 3 - - const powerMcpFiles = mcpFiles.filter(f => f.basePath.includes('powers') && f.basePath.includes('installed')) // Check power directory mcp.json files - use path separator agnostic check - expect(powerMcpFiles).toHaveLength(2) - - const mcpBasePaths = powerMcpFiles.map(f => f.basePath) - expect(mcpBasePaths.some(p => p.includes('skill-a'))).toBe(true) - expect(mcpBasePaths.some(p => p.includes('skill-b'))).toBe(true) - expect(mcpBasePaths.some(p => p.includes('skill-c'))).toBe(false) - - const globalMcpFile = mcpFiles.find(f => f.basePath.includes('settings')) // Check global settings/mcp.json - expect(globalMcpFile).toBeDefined() - - const skillFile = result.find(r => r.path === 'SKILL.md') // skill-c (no MCP) should go to skills dir with SKILL.md - expect(skillFile).toBeDefined() - expect(skillFile?.basePath).toMatch(/\.kiro[/\\]skills[/\\]skill-c/) - }) - }) - - describe('skill routing: MCP vs non-MCP', () => { - let tempDir: string - - beforeEach(() => tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kiro-routing-test-'))) - - afterEach(() => { - if (tempDir && fs.existsSync(tempDir)) fs.rmSync(tempDir, {recursive: true, force: true}) - }) - - it('should route skill with MCP to powers dir with POWER.md', async () => { - const plugin = new TestableKiroCLIOutputPlugin() - plugin.setMockHomeDir(tempDir) - - const ctx: OutputPluginContext = { - collectedInputContext: { - workspace: {projects: []}, - skills: [ - { - type: PromptKind.Skill, - yamlFrontMatter: {name: 'mcp-skill', description: 'Has MCP'}, - content: '# MCP Skill', - length: 11, - filePathKind: FilePathKind.Relative, - dir: createMockRelativePath('mcp-skill', tempDir), - markdownContents: [], - mcpConfig: { - type: PromptKind.SkillMcpConfig, - mcpServers: {'my-server': {command: 'uvx', args: ['pkg']}}, - rawContent: '{}' - } - } - ] - } as unknown as CollectedInputContext, - logger: {debug: vi.fn(), trace: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn()} as any, - fs, - path - } - - const result = await plugin.registerGlobalOutputFiles(ctx) - - const powerFile = result.find(r => r.path === 'POWER.md') - expect(powerFile).toBeDefined() - expect(powerFile?.basePath).toMatch(/powers[/\\]installed[/\\]mcp-skill/) - - const skillFile = result.find(r => r.path === 'SKILL.md') - expect(skillFile).toBeUndefined() - }) - - it('should route skill without MCP to skills dir with SKILL.md', async () => { - const plugin = new TestableKiroCLIOutputPlugin() - plugin.setMockHomeDir(tempDir) - - const ctx: OutputPluginContext = { - collectedInputContext: { - workspace: {projects: []}, - skills: [ - { - type: PromptKind.Skill, - yamlFrontMatter: {name: 'plain-skill', description: 'No MCP'}, - content: '# Plain Skill', - length: 13, - filePathKind: FilePathKind.Relative, - dir: createMockRelativePath('plain-skill', tempDir), - markdownContents: [] - } - ] - } as unknown as CollectedInputContext, - logger: {debug: vi.fn(), trace: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn()} as any, - fs, - path - } - - const result = await plugin.registerGlobalOutputFiles(ctx) - - const skillFile = result.find(r => r.path === 'SKILL.md') - expect(skillFile).toBeDefined() - expect(skillFile?.basePath).toMatch(/\.kiro[/\\]skills[/\\]plain-skill/) - - const powerFile = result.find(r => r.path === 'POWER.md') - expect(powerFile).toBeUndefined() - }) - - it('should write skill without MCP to ~/.kiro/skills//SKILL.md', async () => { - const plugin = new TestableKiroCLIOutputPlugin() - plugin.setMockHomeDir(tempDir) - - const ctx = { - dryRun: false, - collectedInputContext: { - workspace: {projects: []}, - globalMemory: void 0, - fastCommands: [], - skills: [ - { - type: PromptKind.Skill, - yamlFrontMatter: {name: 'plain-skill', description: 'No MCP'}, - content: '# Plain Skill Content', - length: 21, - filePathKind: FilePathKind.Relative, - dir: createMockRelativePath('plain-skill', tempDir), - markdownContents: [] - } - ] - }, - logger: {debug: vi.fn(), trace: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn()} as any, - fs, - path, - glob: {} as any - } - - await plugin.writeGlobalOutputs(ctx as any) - - const skillFilePath = path.join(tempDir, '.kiro', 'skills', 'plain-skill', 'SKILL.md') - expect(fs.existsSync(skillFilePath)).toBe(true) - const content = fs.readFileSync(skillFilePath, 'utf8') - expect(content).toContain('name: plain-skill') - expect(content).toContain('# Plain Skill Content') - - const powerFilePath = path.join(tempDir, '.kiro', 'powers', 'installed', 'plain-skill', 'POWER.md') - expect(fs.existsSync(powerFilePath)).toBe(false) - }) - - it('should write skill with MCP to ~/.kiro/powers/installed//POWER.md', async () => { - const plugin = new TestableKiroCLIOutputPlugin() - plugin.setMockHomeDir(tempDir) - - const mcpRawContent = JSON.stringify({mcpServers: {srv: {command: 'uvx'}}}, null, 2) - - const ctx = { - dryRun: false, - collectedInputContext: { - workspace: {projects: []}, - globalMemory: void 0, - fastCommands: [], - skills: [ - { - type: PromptKind.Skill, - yamlFrontMatter: {name: 'mcp-skill', description: 'Has MCP'}, - content: '# MCP Content', - length: 14, - filePathKind: FilePathKind.Relative, - dir: createMockRelativePath('mcp-skill', tempDir), - markdownContents: [], - mcpConfig: { - type: PromptKind.SkillMcpConfig, - mcpServers: {srv: {command: 'uvx'}}, - rawContent: mcpRawContent - } - } - ] - }, - logger: {debug: vi.fn(), trace: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn()} as any, - fs, - path, - glob: {} as any - } - - await plugin.writeGlobalOutputs(ctx as any) - - const powerFilePath = path.join(tempDir, '.kiro', 'powers', 'installed', 'mcp-skill', 'POWER.md') - expect(fs.existsSync(powerFilePath)).toBe(true) - const content = fs.readFileSync(powerFilePath, 'utf8') - expect(content).toContain('name: mcp-skill') - expect(content).toContain('# MCP Content') - - const mcpConfigPath = path.join(tempDir, '.kiro', 'powers', 'installed', 'mcp-skill', 'mcp.json') - expect(fs.existsSync(mcpConfigPath)).toBe(true) - - const skillFilePath = path.join(tempDir, '.kiro', 'skills', 'mcp-skill', 'SKILL.md') - expect(fs.existsSync(skillFilePath)).toBe(false) - }) - - it('should register skills dir entries for cleanup in registerGlobalOutputDirs', async () => { - const plugin = new TestableKiroCLIOutputPlugin() - - const skillsDir = path.join(tempDir, '.kiro', 'skills') - fs.mkdirSync(skillsDir, {recursive: true}) - fs.mkdirSync(path.join(skillsDir, 'old-skill')) - fs.mkdirSync(path.join(skillsDir, 'another-skill')) - - plugin.setMockHomeDir(tempDir) - - const ctx: OutputPluginContext = { - collectedInputContext: { - workspace: {projects: []}, - skills: [] - } as unknown as CollectedInputContext, - logger: {debug: vi.fn(), trace: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn()} as any, - fs, - path - } - - const result = await plugin.registerGlobalOutputDirs(ctx) - - const skillDirs = result.filter(r => r.basePath.includes('.kiro') && r.basePath.includes('skills') && !r.basePath.includes('powers')) - expect(skillDirs).toHaveLength(2) - - const skillNames = skillDirs.map(r => r.path) - expect(skillNames).toContain('old-skill') - expect(skillNames).toContain('another-skill') - }) - }) - - describe('buildSkillFrontMatter', () => { - it('should include name and description', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const fm = {name: 'my-skill', description: 'A skill'} as SkillYAMLFrontMatter - - const result = plugin.testBuildSkillFrontMatter(fm) - - expect(result).toContain('---') - expect(result).toContain('name: my-skill') - expect(result).toContain('description: A skill') - }) - - it('should include optional fields when provided', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const fm = { - name: 'full-skill', - description: 'Full', - displayName: 'Full Skill', - keywords: ['a', 'b'], - author: 'TrueNine' - } as SkillYAMLFrontMatter - - const result = plugin.testBuildSkillFrontMatter(fm) - - expect(result).toContain('displayName: Full Skill') - expect(result).toContain('- a') - expect(result).toContain('- b') - expect(result).toContain('author: TrueNine') - }) - - it('should omit optional fields when not provided', () => { - const plugin = new TestableKiroCLIOutputPlugin() - const fm = {name: 'minimal', description: ''} as SkillYAMLFrontMatter - - const result = plugin.testBuildSkillFrontMatter(fm) - - expect(result).not.toContain('displayName') - expect(result).not.toContain('keywords') - expect(result).not.toContain('author') - }) - }) -}) diff --git a/packages/plugin-kiro-ide/src/KiroCLIOutputPlugin.ts b/packages/plugin-kiro-ide/src/KiroCLIOutputPlugin.ts deleted file mode 100644 index f72ffff7..00000000 --- a/packages/plugin-kiro-ide/src/KiroCLIOutputPlugin.ts +++ /dev/null @@ -1,459 +0,0 @@ -import type { - FastCommandPrompt, - OutputPluginContext, - OutputWriteContext, - Project, - ProjectChildrenMemoryPrompt, - RegistryOperationResult, - RulePrompt, - SkillPrompt, - SkillYAMLFrontMatter, - WriteResult, - WriteResults -} from '@truenine/plugin-shared' -import type {RelativePath} from '@truenine/plugin-shared/types' -import {AbstractOutputPlugin} from '@truenine/plugin-output-shared' -import {applySubSeriesGlobPrefix, filterCommandsByProjectConfig, filterRulesByProjectConfig, filterSkillsByProjectConfig} from '@truenine/plugin-output-shared/utils' -import {KiroPowersRegistryWriter} from './KiroPowersRegistryWriter' - -const GLOBAL_MEMORY_FILE = 'GLOBAL.md' -const GLOBAL_CONFIG_DIR = '.kiro' -const STEERING_SUBDIR = 'steering' -const SETTINGS_SUBDIR = 'settings' -const MCP_CONFIG_FILE = 'mcp.json' -const KIRO_POWERS_DIR = '.kiro/powers/installed' -const KIRO_SKILLS_DIR = '.kiro/skills' -const POWER_FILE_NAME = 'POWER.md' -const SKILL_FILE_NAME = 'SKILL.md' -const RULE_FILE_PREFIX = 'rule-' - -export class KiroCLIOutputPlugin extends AbstractOutputPlugin { - constructor() { - super('KiroCLIOutputPlugin', {globalConfigDir: GLOBAL_CONFIG_DIR, outputFileName: GLOBAL_MEMORY_FILE, indexignore: '.kiroignore'}) - - this.registerCleanEffect('registry-cleanup', async ctx => { - const writer = this.getRegistryWriter(KiroPowersRegistryWriter) - const success = writer.unregisterLocalPowers(ctx.dryRun) - if (success) return {success: true, description: 'Reset registry'} - return {success: false, description: 'Failed', error: new Error('Registry cleanup failed')} - }) - - this.registerCleanEffect('mcp-settings-cleanup', async ctx => { - const mcpPath = this.joinPath(this.getGlobalSettingsDir(), MCP_CONFIG_FILE) - const content = JSON.stringify({mcpServers: {}, powers: {mcpServers: {}}}, null, 2) - if (ctx.dryRun === true) { - this.log.trace({action: 'dryRun', type: 'mcpSettingsCleanup', path: mcpPath}) - return {success: true, description: 'Would reset mcp.json'} - } - const result = await this.writeFile(ctx, mcpPath, content, 'mcpSettingsCleanup') - if (result.success) return {success: true, description: 'Reset mcp.json'} - return {success: false, description: 'Failed', error: result.error ?? new Error('Cleanup failed')} - }) - } - - private getGlobalSettingsDir(): string { - return this.joinPath(this.getHomeDir(), GLOBAL_CONFIG_DIR, SETTINGS_SUBDIR) - } - - private getGlobalSteeringDir(): string { - return this.joinPath(this.getGlobalConfigDir(), STEERING_SUBDIR) - } - - private getKiroPowersDir(): string { - return this.joinPath(this.getHomeDir(), KIRO_POWERS_DIR) - } - - private getKiroSkillsDir(): string { - return this.joinPath(this.getHomeDir(), KIRO_SKILLS_DIR) - } - - async registerProjectOutputDirs(ctx: OutputPluginContext): Promise { - const {projects} = ctx.collectedInputContext.workspace - return projects - .filter(p => p.dirFromWorkspacePath != null) - .map(p => this.createRelativePath( - this.joinPath(p.dirFromWorkspacePath!.path, GLOBAL_CONFIG_DIR, STEERING_SUBDIR), - p.dirFromWorkspacePath!.basePath, - () => STEERING_SUBDIR - )) - } - - async registerProjectOutputFiles(ctx: OutputPluginContext): Promise { - const {projects} = ctx.collectedInputContext.workspace - const {rules} = ctx.collectedInputContext - const results: RelativePath[] = [] - - for (const project of projects) { - if (project.dirFromWorkspacePath == null) continue - - if (project.childMemoryPrompts != null) { - for (const child of project.childMemoryPrompts) { - results.push(this.createRelativePath( - this.joinPath(project.dirFromWorkspacePath.path, GLOBAL_CONFIG_DIR, STEERING_SUBDIR, this.buildSteeringFileName(child)), - project.dirFromWorkspacePath.basePath, - () => STEERING_SUBDIR - )) - } - } - - if (rules != null && rules.length > 0) { - const projectRules = applySubSeriesGlobPrefix( - filterRulesByProjectConfig( - rules.filter(r => r.scope === 'project'), - project.projectConfig - ), - project.projectConfig - ) - for (const rule of projectRules) { - const fileName = this.buildRuleSteeringFileName(rule) - results.push(this.createRelativePath( - this.joinPath(project.dirFromWorkspacePath.path, GLOBAL_CONFIG_DIR, STEERING_SUBDIR, fileName), - project.dirFromWorkspacePath.basePath, - () => STEERING_SUBDIR - )) - } - } - } - - results.push(...this.registerProjectIgnoreOutputFiles(projects)) - return results - } - - async registerGlobalOutputDirs(): Promise { - const results: RelativePath[] = [ - this.createRelativePath(STEERING_SUBDIR, this.getGlobalConfigDir(), () => STEERING_SUBDIR) - ] - - const powersDir = this.getKiroPowersDir() - for (const powerName of this.listInstalledPowers(powersDir)) results.push(this.createRelativePath(powerName, powersDir, () => powerName)) - - const skillsDir = this.getKiroSkillsDir() - for (const skillName of this.listInstalledPowers(skillsDir)) results.push(this.createRelativePath(skillName, skillsDir, () => skillName)) - - results.push(this.createRelativePath('repos', this.joinPath(this.getHomeDir(), '.kiro/powers'), () => 'repos')) - return results - } - - private listInstalledPowers(powersDir: string): string[] { - try { - if (!this.existsSync(powersDir)) return [] - return this.readdirSync(powersDir, {withFileTypes: true}).filter(e => e.isDirectory()).map(e => e.name) - } catch { - return [] - } - } - - async registerGlobalOutputFiles(ctx: OutputPluginContext): Promise { - const {globalMemory, fastCommands, skills, rules} = ctx.collectedInputContext - const projectConfig = this.resolvePromptSourceProjectConfig(ctx) - const steeringDir = this.getGlobalSteeringDir() - const results: RelativePath[] = [] - - if (globalMemory != null) results.push(this.createRelativePath(GLOBAL_MEMORY_FILE, steeringDir, () => STEERING_SUBDIR)) - - if (fastCommands != null) { - const filteredCommands = filterCommandsByProjectConfig(fastCommands, projectConfig) - for (const cmd of filteredCommands) results.push(this.createRelativePath(this.buildFastCommandSteeringFileName(cmd), steeringDir, () => STEERING_SUBDIR)) - } - - const globalRules = rules?.filter(r => r.scope === 'global') - if (globalRules != null && globalRules.length > 0) { - for (const rule of globalRules) results.push(this.createRelativePath(this.buildRuleSteeringFileName(rule), steeringDir, () => STEERING_SUBDIR)) - } - - const filteredSkills = skills != null ? filterSkillsByProjectConfig(skills, projectConfig) : [] - if (filteredSkills.length === 0) return results - - const powersDir = this.getKiroPowersDir() - const skillsDir = this.getKiroSkillsDir() - - for (const skill of filteredSkills) { - const skillName = skill.yamlFrontMatter.name - const hasMcp = skill.mcpConfig != null - - if (hasMcp) { - const skillDir = this.joinPath(powersDir, skillName) - results.push(this.createRelativePath(POWER_FILE_NAME, skillDir, () => skillName)) - results.push(this.createRelativePath(MCP_CONFIG_FILE, skillDir, () => skillName)) - - if (skill.childDocs != null) { - for (const refDoc of skill.childDocs) { - results.push(this.createRelativePath( - this.joinPath(STEERING_SUBDIR, refDoc.dir.path.replace(/\.mdx$/, '.md')), - skillDir, - () => STEERING_SUBDIR - )) - } - } - if (skill.resources != null) { - for (const res of skill.resources) results.push(this.createRelativePath(this.joinPath(STEERING_SUBDIR, res.relativePath), skillDir, () => STEERING_SUBDIR)) - } - } else { - const skillDir = this.joinPath(skillsDir, skillName) - results.push(this.createRelativePath(SKILL_FILE_NAME, skillDir, () => skillName)) - - if (skill.childDocs != null) { - for (const refDoc of skill.childDocs) { - results.push(this.createRelativePath( - refDoc.dir.path.replace(/\.mdx$/, '.md'), - skillDir, - () => skillName - )) - } - } - if (skill.resources != null) { - for (const res of skill.resources) results.push(this.createRelativePath(res.relativePath, skillDir, () => skillName)) - } - } - } - if (filteredSkills.some(s => s.mcpConfig != null)) results.push(this.createRelativePath(MCP_CONFIG_FILE, this.getGlobalSettingsDir(), () => SETTINGS_SUBDIR)) - return results - } - - async canWrite(ctx: OutputWriteContext): Promise { - const {workspace, globalMemory, fastCommands, skills, rules, aiAgentIgnoreConfigFiles} = ctx.collectedInputContext - const hasChildPrompts = workspace.projects.some(p => (p.childMemoryPrompts?.length ?? 0) > 0) - const hasRules = (rules?.length ?? 0) > 0 - const hasKiroIgnore = aiAgentIgnoreConfigFiles?.some(f => f.fileName === '.kiroignore') ?? false - - if (hasChildPrompts || globalMemory != null || (fastCommands?.length ?? 0) > 0 || (skills?.length ?? 0) > 0 || hasRules || hasKiroIgnore) return true - this.log.trace({action: 'skip', reason: 'noOutputs'}) - return false - } - - async writeProjectOutputs(ctx: OutputWriteContext): Promise { - const {projects} = ctx.collectedInputContext.workspace - const {rules} = ctx.collectedInputContext - const fileResults: WriteResult[] = [] - - for (const project of projects) { - if (project.dirFromWorkspacePath == null) continue - - if (project.childMemoryPrompts != null) { - for (const child of project.childMemoryPrompts) fileResults.push(await this.writeSteeringFile(ctx, project, child)) - } - - if (rules != null && rules.length > 0) { - const projectRules = applySubSeriesGlobPrefix( - filterRulesByProjectConfig( - rules.filter(r => r.scope === 'project'), - project.projectConfig - ), - project.projectConfig - ) - for (const rule of projectRules) fileResults.push(await this.writeRuleSteeringFile(ctx, project, rule)) - } - } - - const ignoreResults = await this.writeProjectIgnoreFiles(ctx) - fileResults.push(...ignoreResults) - - return {files: fileResults, dirs: []} - } - - async writeGlobalOutputs(ctx: OutputWriteContext): Promise { - const {globalMemory, fastCommands, skills, rules} = ctx.collectedInputContext - const projectConfig = this.resolvePromptSourceProjectConfig(ctx) - const fileResults: WriteResult[] = [] - const registryResults: RegistryOperationResult[] = [] - const steeringDir = this.getGlobalSteeringDir() - - if (globalMemory != null) { - fileResults.push(await this.writeFile(ctx, this.joinPath(steeringDir, GLOBAL_MEMORY_FILE), globalMemory.content as string, 'globalMemory')) - } - - if (fastCommands != null) { - const filteredCommands = filterCommandsByProjectConfig(fastCommands, projectConfig) - for (const cmd of filteredCommands) fileResults.push(await this.writeFastCommandSteeringFile(ctx, cmd)) - } - - const globalRules = rules?.filter(r => r.scope === 'global') - if (globalRules != null && globalRules.length > 0) { - for (const rule of globalRules) { - const fileName = this.buildRuleSteeringFileName(rule) - const fullPath = this.joinPath(steeringDir, fileName) - const content = this.buildRuleSteeringContent(rule) - fileResults.push(await this.writeFile(ctx, fullPath, content, 'ruleSteeringFile')) - } - } - - const filteredSkills = skills != null ? filterSkillsByProjectConfig(skills, projectConfig) : [] - if (filteredSkills.length === 0) return {files: fileResults, dirs: []} - - const powerSkills = filteredSkills.filter(s => s.mcpConfig != null) - const plainSkills = filteredSkills.filter(s => s.mcpConfig == null) - - for (const skill of powerSkills) { - const {fileResults: skillFiles, registryResult} = await this.writeSkillAsPower(ctx, skill) - fileResults.push(...skillFiles) - registryResults.push(registryResult) - } - - for (const skill of plainSkills) { - const skillFiles = await this.writeSkillAsKiroSkill(ctx, skill) - fileResults.push(...skillFiles) - } - - const mcpResult = await this.writeGlobalMcpSettings(ctx, filteredSkills) - if (mcpResult != null) fileResults.push(mcpResult) - this.logRegistryResults(registryResults, ctx.dryRun) - return {files: fileResults, dirs: []} - } - - private async writeGlobalMcpSettings(ctx: OutputWriteContext, skills: readonly SkillPrompt[]): Promise { - const powersMcpServers: Record = {} - for (const skill of skills) { - if (skill.mcpConfig == null) continue - for (const [mcpName, config] of Object.entries(skill.mcpConfig.mcpServers)) powersMcpServers[`power-${skill.yamlFrontMatter.name}-${mcpName}`] = config - } - if (Object.keys(powersMcpServers).length === 0) return null - - const content = JSON.stringify({mcpServers: {}, powers: {mcpServers: powersMcpServers}}, null, 2) - return this.writeFile(ctx, this.joinPath(this.getGlobalSettingsDir(), MCP_CONFIG_FILE), content, 'globalMcpSettings') - } - - private logRegistryResults(results: readonly RegistryOperationResult[], dryRun?: boolean): void { - const success = results.filter(r => r.success).length - const fail = results.filter(r => !r.success).length - if (success > 0) this.log.trace({action: dryRun === true ? 'dryRun' : 'register', type: 'registrySummary', successCount: success}) - if (fail > 0) this.log.error({action: 'register', type: 'registrySummary', failCount: fail}) - } - - private async writeSkillAsPower(ctx: OutputWriteContext, skill: SkillPrompt): Promise<{fileResults: WriteResult[], registryResult: RegistryOperationResult}> { - const fileResults: WriteResult[] = [] - const skillName = skill.yamlFrontMatter.name - const powerDir = this.joinPath(this.getKiroPowersDir(), skillName) - const powerFilePath = this.joinPath(powerDir, POWER_FILE_NAME) - - const fmStr = this.buildPowerFrontMatter(skill.yamlFrontMatter) - const powerContent = `${fmStr}\n${skill.content as string}` - fileResults.push(await this.writeFile(ctx, powerFilePath, powerContent, 'skillPower')) - - if (skill.childDocs != null) { - const steeringDir = this.joinPath(powerDir, STEERING_SUBDIR) - for (const refDoc of skill.childDocs) { - const fileName = refDoc.dir.path.replace(/\.mdx$/, '.md') - fileResults.push(await this.writeFile(ctx, this.joinPath(steeringDir, fileName), refDoc.content as string, 'refDoc')) - } - } - - if (skill.resources != null) { - const steeringDir = this.joinPath(powerDir, STEERING_SUBDIR) - for (const res of skill.resources) fileResults.push(await this.writeFile(ctx, this.joinPath(steeringDir, res.relativePath), res.content, 'resource')) - } - - if (skill.mcpConfig != null) fileResults.push(await this.writeFile(ctx, this.joinPath(powerDir, MCP_CONFIG_FILE), skill.mcpConfig.rawContent, 'mcpConfig')) - - const writer = this.getRegistryWriter(KiroPowersRegistryWriter) - const powerEntry = writer.buildPowerEntry(skill, powerDir) - const regResults = await this.registerInRegistry(writer, [powerEntry], ctx) - const registryResult = regResults[0] ?? {success: false, entryName: skillName, error: new Error('No registry result')} - - return {fileResults, registryResult} - } - - private async writeSkillAsKiroSkill(ctx: OutputWriteContext, skill: SkillPrompt): Promise { - const fileResults: WriteResult[] = [] - const skillName = skill.yamlFrontMatter.name - const skillDir = this.joinPath(this.getKiroSkillsDir(), skillName) - const skillFilePath = this.joinPath(skillDir, SKILL_FILE_NAME) - - const fmStr = this.buildSkillFrontMatter(skill.yamlFrontMatter) - const skillContent = `${fmStr}\n${skill.content as string}` - fileResults.push(await this.writeFile(ctx, skillFilePath, skillContent, 'kiroSkill')) - - if (skill.childDocs != null) { - for (const refDoc of skill.childDocs) { - const fileName = refDoc.dir.path.replace(/\.mdx$/, '.md') - fileResults.push(await this.writeFile(ctx, this.joinPath(skillDir, fileName), refDoc.content as string, 'refDoc')) - } - } - - if (skill.resources != null) { - for (const res of skill.resources) fileResults.push(await this.writeFile(ctx, this.joinPath(skillDir, res.relativePath), res.content, 'resource')) - } - - return fileResults - } - - private buildSkillFrontMatter(fm: SkillYAMLFrontMatter): string { - return this.buildMarkdownContent('', { - name: fm.name, - description: fm.description, - ...fm.displayName != null && {displayName: fm.displayName}, - ...fm.keywords != null && fm.keywords.length > 0 && {keywords: fm.keywords}, - ...fm.author != null && {author: fm.author} - }).trimEnd() - } - - private buildPowerFrontMatter(fm: SkillYAMLFrontMatter): string { - return this.buildMarkdownContent('', { - name: fm.name, - displayName: fm.displayName, - description: fm.description, - keywords: fm.keywords, - author: fm.author - }).trimEnd() - } - - private buildFastCommandSteeringFileName(cmd: FastCommandPrompt): string { - return this.transformFastCommandName(cmd, {includeSeriesPrefix: true, seriesSeparator: '-'}) - } - - private async writeFastCommandSteeringFile(ctx: OutputWriteContext, cmd: FastCommandPrompt): Promise { - const fileName = this.buildFastCommandSteeringFileName(cmd) - const fullPath = this.joinPath(this.getGlobalSteeringDir(), fileName) - const desc = cmd.yamlFrontMatter?.description - const content = this.buildMarkdownContent(cmd.content, { - inclusion: 'manual', - description: desc != null && desc.length > 0 ? desc : null - }) - return this.writeFile(ctx, fullPath, content, 'fastCommandSteering') - } - - private buildSteeringFileName(child: ProjectChildrenMemoryPrompt): string { - const childPath = child.workingChildDirectoryPath?.path ?? child.dir.path - const normalized = childPath.replaceAll('\\', '/').replaceAll(/^\/+|\/+$/g, '').replaceAll('/', '-') - return `kiro-${normalized}.md` - } - - private buildRuleSteeringFileName(rule: RulePrompt): string { - return `${RULE_FILE_PREFIX}${rule.series}-${rule.ruleName}.md` - } - - private buildRuleSteeringContent(rule: RulePrompt): string { - const fileMatchPattern = rule.globs.length === 1 - ? rule.globs[0] - : `{${rule.globs.join(',')}}` - - return this.buildMarkdownContent(rule.content, { - inclusion: 'fileMatch', - fileMatchPattern - }) - } - - private async writeRuleSteeringFile(ctx: OutputWriteContext, project: Project, rule: RulePrompt): Promise { - const projectDir = project.dirFromWorkspacePath! - const fileName = this.buildRuleSteeringFileName(rule) - const targetDir = this.joinPath(projectDir.basePath, projectDir.path, GLOBAL_CONFIG_DIR, STEERING_SUBDIR) - const fullPath = this.joinPath(targetDir, fileName) - const content = this.buildRuleSteeringContent(rule) - - return this.writeFile(ctx, fullPath, content, 'ruleSteeringFile') - } - - private async writeSteeringFile(ctx: OutputWriteContext, project: Project, child: ProjectChildrenMemoryPrompt): Promise { - const projectDir = project.dirFromWorkspacePath! - const fileName = this.buildSteeringFileName(child) - const targetDir = this.joinPath(projectDir.basePath, projectDir.path, GLOBAL_CONFIG_DIR, STEERING_SUBDIR) - const fullPath = this.joinPath(targetDir, fileName) - - const childPath = child.workingChildDirectoryPath?.path ?? child.dir.path - const content = this.buildMarkdownContent(child.content as string, { - inclusion: 'fileMatch', - fileMatchPattern: `${childPath.replaceAll('\\', '/')}/**` - }) - - return this.writeFile(ctx, fullPath, content, 'steeringFile') - } -} diff --git a/packages/plugin-kiro-ide/src/KiroPowers.integration.test.ts b/packages/plugin-kiro-ide/src/KiroPowers.integration.test.ts deleted file mode 100644 index 9513334e..00000000 --- a/packages/plugin-kiro-ide/src/KiroPowers.integration.test.ts +++ /dev/null @@ -1,194 +0,0 @@ -import type {SkillPrompt, SkillReferenceDocument, SkillYAMLFrontMatter} from '@truenine/plugin-shared' -import * as fs from 'node:fs' -import * as os from 'node:os' -import * as path from 'node:path' -import {parseMarkdown} from '@truenine/md-compiler/markdown' -import {FilePathKind, PromptKind} from '@truenine/plugin-shared' -import * as fc from 'fast-check' -import {afterEach, beforeEach, describe, expect, it} from 'vitest' - -/** - * Integration tests for Kiro Powers Skill Output - * Tests the round-trip property and co-location of reference documents - */ -describe('kiroPowersIntegration', () => { - let tempDir: string - - beforeEach(() => { - tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kiro-powers-test-')) // Create a temporary directory for test files - }) - - afterEach(() => { - if (fs.existsSync(tempDir)) fs.rmSync(tempDir, {recursive: true, force: true}) // Clean up temporary directory - }) - - describe('property 4: Reference Document Round-Trip', () => { - const markdownContentGen = fc.array( // Generator for valid markdown content (without front matter for simplicity) - fc.oneof( - fc.constant('# Heading\n'), - fc.constant('## Subheading\n'), - fc.constant('- List item\n'), - fc.constant('* Bullet point\n'), - fc.constant('\n'), - fc.constant('Some text content.\n'), - fc.constant('Another paragraph.\n'), - fc.constant('Code: `example`\n') - ), - {minLength: 1, maxLength: 10} - ).map(parts => parts.join('').trim() || 'Default content') - - const fileNameGen = fc.string({minLength: 1, maxLength: 20, unit: 'grapheme-ascii'}) // Generator for valid file names (alphanumeric with .md extension) - .filter(s => /^[a-z0-9]+$/i.test(s)) - .map(s => `${s}.md`) - - it('should preserve content when reading and writing reference documents', () => { - fc.assert( - fc.property( - markdownContentGen, - fileNameGen, - (content, fileName) => { - const refDocPath = path.join(tempDir, fileName) // Arrange: Create a reference document file - fs.writeFileSync(refDocPath, content, 'utf8') - - const parsed = parseMarkdown(content) // Act: Parse the content using parseMarkdown (same as SkillInputPlugin) - const parsedContent = parsed.contentWithoutFrontMatter - - const outputPath = path.join(tempDir, `output-${fileName}`) // Simulate writing via KiroCLIOutputPlugin (writes content without front matter) - fs.writeFileSync(outputPath, parsedContent, 'utf8') - - const readBackContent = fs.readFileSync(outputPath, 'utf8') // Assert: Read back and verify content is identical - expect(readBackContent).toBe(parsedContent) - } - ), - {numRuns: 100} - ) - }) - - it('should preserve content with front matter when round-tripping', () => { - fc.assert( - fc.property( - markdownContentGen, - fileNameGen, - (bodyContent, fileName) => { - const frontMatter = '---\ntitle: Test Document\n---\n' // Arrange: Create content with front matter - const fullContent = `${frontMatter}${bodyContent}` - const refDocPath = path.join(tempDir, fileName) - fs.writeFileSync(refDocPath, fullContent, 'utf8') - - const parsed = parseMarkdown(fullContent) // Act: Parse the content - const {contentWithoutFrontMatter} = parsed - - const outputPath = path.join(tempDir, `output-${fileName}`) // Write the content without front matter (as KiroCLIOutputPlugin does) - fs.writeFileSync(outputPath, contentWithoutFrontMatter, 'utf8') - - const readBackContent = fs.readFileSync(outputPath, 'utf8') // Assert: Content without front matter should match body content - expect(readBackContent).toBe(bodyContent) - } - ), - {numRuns: 100} - ) - }) - }) - - describe('property 6: Reference Document Co-location', () => { - const skillNameGen = fc.string({minLength: 1, maxLength: 15, unit: 'grapheme-ascii'}) // Generator for valid skill names (alphanumeric, kebab-case friendly) - .filter(s => /^[a-z0-9]+$/i.test(s)) - .map(s => s || 'default-skill') - - const refDocFileNameGen = fc.string({minLength: 1, maxLength: 10, unit: 'grapheme-ascii'}) // Generator for reference document file names - .filter(s => /^[a-z0-9]+$/i.test(s)) - .map(s => `${s || 'doc'}.md`) - - it('should place all reference documents in the same directory as POWER.md', () => { - fc.assert( - fc.property( - skillNameGen, - fc.array(refDocFileNameGen, {minLength: 0, maxLength: 5}), - (skillName, refDocFileNames) => { - const uniqueFileNames = [...new Set(refDocFileNames)] // Ensure unique file names - - const referenceDocuments: SkillReferenceDocument[] = uniqueFileNames.map(fileName => ({ // Create mock reference documents - type: PromptKind.SkillReferenceDocument, - content: `Content of ${fileName}`, - length: `Content of ${fileName}`.length, - filePathKind: FilePathKind.Relative, - markdownContents: [], - dir: { - pathKind: FilePathKind.Relative, - path: fileName, - basePath: tempDir, - getDirectoryName: () => '', - getAbsolutePath: () => path.join(tempDir, fileName) - } - })) - - const _skill: SkillPrompt = { // Create mock skill prompt (prefixed with _ as it's used for documentation purposes) - type: PromptKind.Skill, - content: '# Skill Content', - length: 15, - filePathKind: FilePathKind.Relative, - yamlFrontMatter: { - name: skillName, - description: 'Test skill' - } as SkillYAMLFrontMatter, - markdownContents: [], - dir: { - pathKind: FilePathKind.Relative, - path: skillName, - basePath: tempDir, - getDirectoryName: () => skillName, - getAbsolutePath: () => path.join(tempDir, skillName) - }, - ...referenceDocuments.length > 0 && {referenceDocuments} - } - - const powersDir = path.join(os.homedir(), '.kiro/powers/installed') // Calculate expected paths - const skillPowerDir = path.join(powersDir, skillName) - const expectedPowerMdPath = path.join(skillPowerDir, 'POWER.md') - - for (const refDoc of referenceDocuments) { // Verify all reference documents would be in the same directory - const expectedRefDocPath = path.join(skillPowerDir, refDoc.dir.path) - const refDocDir = path.dirname(expectedRefDocPath) - const powerMdDir = path.dirname(expectedPowerMdPath) - - expect(refDocDir).toBe(powerMdDir) // Assert: Reference document directory should equal POWER.md directory - } - - return true - } - ), - {numRuns: 100} - ) - }) - - it('should maintain co-location for skills with varying numbers of reference documents', () => { - fc.assert( - fc.property( - skillNameGen, - fc.array(refDocFileNameGen, {minLength: 1, maxLength: 10}), - (skillName, refDocFileNames) => { - const uniqueFileNames = [...new Set(refDocFileNames)] // Ensure unique file names - if (uniqueFileNames.length === 0) return true - - const powersDir = path.join(os.homedir(), '.kiro/powers/installed') // Calculate expected base directory - const skillPowerDir = path.join(powersDir, skillName) - - const allPaths = [ // All files should be in the same directory - path.join(skillPowerDir, 'POWER.md'), - ...uniqueFileNames.map(fn => path.join(skillPowerDir, fn)) - ] - - const directories = allPaths.map(p => path.dirname(p)) - const uniqueDirs = [...new Set(directories)] - - expect(uniqueDirs.length).toBe(1) // Assert: All files should be in exactly one directory - expect(uniqueDirs[0]).toBe(skillPowerDir) - - return true - } - ), - {numRuns: 100} - ) - }) - }) -}) diff --git a/packages/plugin-kiro-ide/src/KiroPowersRegistryWriter.property.test.ts b/packages/plugin-kiro-ide/src/KiroPowersRegistryWriter.property.test.ts deleted file mode 100644 index a76897f2..00000000 --- a/packages/plugin-kiro-ide/src/KiroPowersRegistryWriter.property.test.ts +++ /dev/null @@ -1,272 +0,0 @@ -/** - * Property-based tests for KiroPowersRegistryWriter - * - * Feature: plugin-side-effects - * Property 6: Registry Reset to Official State - * - * After executing the clean effect, the registry shall be reset to the official - * Kiro powers registry state (from build-time constant or empty fallback). - * - * Validates: Requirements 6.1, 6.2 - */ - -import type { - KiroPowerEntry, - KiroPowersRegistry, - KiroRepoSource -} from '@truenine/plugin-shared' - -import * as fs from 'node:fs' -import * as os from 'node:os' -import * as path from 'node:path' - -import * as fc from 'fast-check' -import {afterEach, beforeEach, describe, expect, it} from 'vitest' - -import {KiroPowersRegistryWriter} from './KiroPowersRegistryWriter' - -/** - * Test subclass that allows setting a custom registry path for testing. - */ -class TestableKiroPowersRegistryWriter extends KiroPowersRegistryWriter { - private readonly testRegistryPath: string - - constructor(testRegistryPath: string) { - super() - this.testRegistryPath = testRegistryPath - ; (this as any).registryPath = testRegistryPath // Override the registry path using reflection - } -} - -/** - * Generators for property-based testing - */ - -const powerNameGen = fc.string({minLength: 1, maxLength: 30, unit: 'grapheme-ascii'}) // Generator for valid power names (alphanumeric with hyphens) - .filter(s => /^[a-z][a-z0-9-]*$/i.test(s)) - -const descriptionGen = fc.string({minLength: 1, maxLength: 100}) // Generator for descriptions - -const keywordsGen = fc.array( // Generator for keywords - fc.string({minLength: 1, maxLength: 20, unit: 'grapheme-ascii'}).filter(s => /^[a-z0-9]+$/i.test(s)), - {minLength: 0, maxLength: 5} -) - -const validDateGen = fc.integer({ // Using integer timestamps to ensure valid dates // Generator for valid dates (constrained to avoid invalid date values) - min: new Date('2020-01-01').getTime(), - max: new Date('2030-12-31').getTime() -}).map(timestamp => new Date(timestamp)) - -const localPowerEntryGen = fc.record({ // Generator for local power entries (source.repoId starts with 'local-') - name: powerNameGen, - description: descriptionGen, - keywords: keywordsGen, - installed: fc.constant(true), - installedAt: validDateGen.map(d => d.toISOString()), - installPath: fc.string({minLength: 1, maxLength: 50}).map(s => `/test/path/${s}`), - source: fc.record({ - type: fc.constant('repo' as const), - repoId: fc.string({minLength: 1, maxLength: 20, unit: 'grapheme-ascii'}) - .filter(s => /^[a-z0-9]+$/i.test(s)) - .map(s => `local-${s}`), // Ensure repoId starts with 'local-' - repoName: fc.string({minLength: 1, maxLength: 30}) - }), - sourcePath: fc.string({minLength: 1, maxLength: 50}).map(s => `/test/source/${s}`) -}) as fc.Arbitrary - -const localRepoSourceGen = fc.record({ - name: fc.string({minLength: 1, maxLength: 50}), - type: fc.constant('local' as const), - enabled: fc.boolean(), - addedAt: validDateGen.map(d => d.toISOString()), - powerCount: fc.nat({max: 10}), - path: fc.string({minLength: 1, maxLength: 50}).map(s => `/test/${s}`), - lastSync: validDateGen.map(d => d.toISOString()) -}) as fc.Arbitrary - -const repoSourceIdGen = fc.string({minLength: 1, maxLength: 30, unit: 'grapheme-ascii'}) // Generator for repoSource ID - .filter(s => /^[a-z0-9-]+$/i.test(s)) - -describe('kiroPowersRegistryWriter Property Tests', () => { - let tempDir: string, - registryPath: string - - beforeEach(() => { - tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'kiro-registry-test-')) // Create a unique temp directory for each test - registryPath = path.join(tempDir, 'registry.json') - }) - - afterEach(() => { - if (fs.existsSync(tempDir)) fs.rmSync(tempDir, {recursive: true, force: true}) // Clean up temp directory - }) - - describe('property 6: Registry Reset to Official State', () => { - it('should reset registry to official state after cleanup (empty in tests)', async () => { - await fc.assert( - fc.asyncProperty( - fc.array(localPowerEntryGen, {minLength: 1, maxLength: 5}), // Generate 0-5 local powers - async localPowers => { - const uniqueLocalPowers = localPowers.map((p, i) => ({ // Ensure unique names by adding index suffix - ...p, - name: `${p.name}-local-${i}` - })) - - const powers: Record = {} // Build initial registry with local powers - for (const power of uniqueLocalPowers) powers[power.name] = power - - const initialRegistry: KiroPowersRegistry = { - version: '1.0.0', - powers, - repoSources: {}, - lastUpdated: new Date().toISOString() - } - - fs.writeFileSync(registryPath, JSON.stringify(initialRegistry, null, 2)) // Write initial registry to disk - - const writer = new TestableKiroPowersRegistryWriter(registryPath) // Create writer and execute cleanup - const result = writer.unregisterLocalPowers(false) - - expect(result).toBe(true) - - const cleanedRegistry = JSON.parse(fs.readFileSync(registryPath, 'utf8')) as KiroPowersRegistry // Read cleaned registry - - expect(cleanedRegistry.version).toBe('1.0.0') // since __KIRO_GLOBAL_POWERS_REGISTRY__ is not defined // In test environment, should reset to empty registry (fallback) - expect(Object.keys(cleanedRegistry.powers).length).toBe(0) - expect(Object.keys(cleanedRegistry.repoSources).length).toBe(0) - expect(cleanedRegistry.lastUpdated).toBeDefined() - } - ), - {numRuns: 50} - ) - }) - - it('should reset registry and clear all repoSources after cleanup', async () => { - await fc.assert( - fc.asyncProperty( - fc.array( // Generate 0-5 local repoSources - fc.tuple(repoSourceIdGen, localRepoSourceGen), - {minLength: 1, maxLength: 5} - ), - async localSources => { - const uniqueLocalSources = localSources.map(([id, source], i) => [ // Ensure unique IDs by adding suffix - `${id}-local-${i}`, - source - ] as const) - - const repoSources: Record = {} // Build initial registry with local repoSources - for (const [id, source] of uniqueLocalSources) repoSources[id] = source - - const initialRegistry: KiroPowersRegistry = { - version: '1.0.0', - powers: {}, - repoSources, - lastUpdated: new Date().toISOString() - } - - fs.writeFileSync(registryPath, JSON.stringify(initialRegistry, null, 2)) // Write initial registry to disk - - const writer = new TestableKiroPowersRegistryWriter(registryPath) // Create writer and execute cleanup - const result = writer.unregisterLocalPowers(false) - - expect(result).toBe(true) - - const cleanedRegistry = JSON.parse(fs.readFileSync(registryPath, 'utf8')) as KiroPowersRegistry // Read cleaned registry - - expect(Object.keys(cleanedRegistry.repoSources).length).toBe(0) // All repoSources should be cleared (reset to official state) - } - ), - {numRuns: 50} - ) - }) - - it('should preserve registry structure after cleanup', async () => { - await fc.assert( - fc.asyncProperty( - fc.array(localPowerEntryGen, {minLength: 1, maxLength: 3}), - async localPowers => { - const uniqueLocalPowers = localPowers.map((p, i) => ({ // Ensure unique names - ...p, - name: `${p.name}-${i}` - })) - - const powers: Record = {} - for (const power of uniqueLocalPowers) powers[power.name] = power - - const initialRegistry: KiroPowersRegistry = { - version: '2.0.0', - powers, - repoSources: {}, - kiroRecommendedRepo: { - url: 'https://example.com/repo', - lastFetch: new Date().toISOString(), - powerCount: 42 - }, - lastUpdated: new Date().toISOString() - } - - fs.writeFileSync(registryPath, JSON.stringify(initialRegistry, null, 2)) // Write and cleanup - const writer = new TestableKiroPowersRegistryWriter(registryPath) - writer.unregisterLocalPowers(false) - - const cleanedRegistry = JSON.parse(fs.readFileSync(registryPath, 'utf8')) as KiroPowersRegistry // Read cleaned registry - - expect(cleanedRegistry.version).toBeDefined() // Verify structure is valid (reset to official state) - expect(cleanedRegistry.powers).toBeDefined() - expect(cleanedRegistry.repoSources).toBeDefined() - expect(cleanedRegistry.lastUpdated).toBeDefined() - } - ), - {numRuns: 50} - ) - }) - - it('should succeed when registry file does not exist', async () => { - if (fs.existsSync(registryPath)) fs.unlinkSync(registryPath) // Ensure registry file does not exist - - const writer = new TestableKiroPowersRegistryWriter(registryPath) - const result = writer.unregisterLocalPowers(false) - - expect(result).toBe(true) // Should succeed without error (Requirement 6.4) - - expect(fs.existsSync(registryPath)).toBe(true) // Registry file should be created with official state - const registry = JSON.parse(fs.readFileSync(registryPath, 'utf8')) as KiroPowersRegistry - expect(registry.version).toBe('1.0.0') - }) - - it('should not modify registry in dry-run mode', async () => { - await fc.assert( - fc.asyncProperty( - fc.array(localPowerEntryGen, {minLength: 1, maxLength: 3}), - async localPowers => { - const uniqueLocalPowers = localPowers.map((p, i) => ({ // Ensure unique names - ...p, - name: `${p.name}-${i}` - })) - - const powers: Record = {} - for (const power of uniqueLocalPowers) powers[power.name] = power - - const initialRegistry: KiroPowersRegistry = { - version: '1.0.0', - powers, - repoSources: {}, - lastUpdated: new Date().toISOString() - } - - fs.writeFileSync(registryPath, JSON.stringify(initialRegistry, null, 2)) // Write initial registry - const originalContent = fs.readFileSync(registryPath, 'utf8') - - const writer = new TestableKiroPowersRegistryWriter(registryPath) // Execute cleanup in dry-run mode - const result = writer.unregisterLocalPowers(true) // dry-run = true - - expect(result).toBe(true) - - const afterContent = fs.readFileSync(registryPath, 'utf8') // Verify file was not modified - expect(afterContent).toBe(originalContent) - } - ), - {numRuns: 50} - ) - }) - }) -}) diff --git a/packages/plugin-kiro-ide/src/KiroPowersRegistryWriter.ts b/packages/plugin-kiro-ide/src/KiroPowersRegistryWriter.ts deleted file mode 100644 index 57faa049..00000000 --- a/packages/plugin-kiro-ide/src/KiroPowersRegistryWriter.ts +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Kiro Powers Registry Writer - * - * Concrete implementation of RegistryWriter for managing Kiro's powers registry. - * Manages ~/.kiro/powers/registry.json file. - * - * @see Requirements 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8 - */ - -import type {ILogger} from '@truenine/plugin-shared' -import type {KiroPowerEntry, KiroPowerSource, KiroPowersRegistry, KiroRepoSource, SkillPrompt} from '@truenine/plugin-shared/types' - -import {RegistryWriter} from '@truenine/plugin-output-shared/registry' - -/** - * Registry writer for Kiro powers. - * Manages ~/.kiro/powers/registry.json file. - * - * @see Requirements 4.1, 4.2 - */ -export class KiroPowersRegistryWriter extends RegistryWriter { - private static readonly REGISTRY_PATH = '~/.kiro/powers/registry.json' - - private static readonly DEFAULT_VERSION = '1.0.0' - - constructor(logger?: ILogger) { - super(KiroPowersRegistryWriter.REGISTRY_PATH, logger) - } - - protected createInitialRegistry(): KiroPowersRegistry { - return { - version: KiroPowersRegistryWriter.DEFAULT_VERSION, - powers: {}, - repoSources: {}, - lastUpdated: new Date().toISOString() - } - } - - protected getEntryName(entry: KiroPowerEntry): string { - return entry.name - } - - protected merge( - existing: KiroPowersRegistry, - entries: readonly KiroPowerEntry[] - ): KiroPowersRegistry { - const powers = {...existing.powers} - const repoSources = {...existing.repoSources} - - for (const entry of entries) { - powers[entry.name] = entry - - const repoSource = this.buildRepoSource(entry) - const repoId = entry.source.repoId ?? entry.name - repoSources[repoId] = repoSource - } - - return { - version: existing.version, - powers, - repoSources, - ...existing.kiroRecommendedRepo != null && { - kiroRecommendedRepo: existing.kiroRecommendedRepo - }, - lastUpdated: existing.lastUpdated - } - } - - buildPowerEntry(skill: SkillPrompt, installPath: string): KiroPowerEntry { - const {yamlFrontMatter, mcpConfig} = skill - const repoId = this.generateEntryId('local') - - const source: KiroPowerSource = { - type: 'repo', - repoId, - repoName: installPath - } - - const mcpServerNames = mcpConfig != null - ? Object.keys(mcpConfig.mcpServers) - : null - - return { - name: yamlFrontMatter.name, - description: yamlFrontMatter.description, - ...mcpServerNames != null && mcpServerNames.length > 0 && {mcpServers: mcpServerNames}, - ...yamlFrontMatter.author != null && {author: yamlFrontMatter.author}, - keywords: yamlFrontMatter.keywords ?? [], - ...yamlFrontMatter.displayName != null && {displayName: yamlFrontMatter.displayName}, - installed: true, - installedAt: new Date().toISOString(), - installPath, - source, - sourcePath: installPath - } - } - - private getOfficialRegistry(): KiroPowersRegistry { - try { - if (typeof __KIRO_GLOBAL_POWERS_REGISTRY__ !== 'undefined') return JSON.parse(__KIRO_GLOBAL_POWERS_REGISTRY__) as KiroPowersRegistry - } - catch { - this.log.debug('Failed to parse official registry, using empty registry') - } - return this.createInitialRegistry() - } - - unregisterLocalPowers(dryRun?: boolean): boolean { - const officialRegistry = this.getOfficialRegistry() - - const resetRegistry: KiroPowersRegistry = { - ...officialRegistry, - lastUpdated: new Date().toISOString() - } - - this.log.trace({action: dryRun === true ? 'dryRun' : 'reset', type: 'registry', powerCount: Object.keys(resetRegistry.powers).length}) - - return this.write(resetRegistry, dryRun) - } - - private buildRepoSource(power: KiroPowerEntry): KiroRepoSource { - const now = new Date().toISOString() - - return { - name: power.sourcePath ?? power.installPath ?? power.name, - type: 'local', - enabled: true, - addedAt: now, - powerCount: 1, - ...power.sourcePath != null && {path: power.sourcePath}, - lastSync: now - } - } -} diff --git a/packages/plugin-kiro-ide/src/index.ts b/packages/plugin-kiro-ide/src/index.ts deleted file mode 100644 index 695ca2cf..00000000 --- a/packages/plugin-kiro-ide/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { - KiroCLIOutputPlugin -} from './KiroCLIOutputPlugin' -export { - KiroPowersRegistryWriter -} from './KiroPowersRegistryWriter' diff --git a/packages/plugin-kiro-ide/tsconfig.eslint.json b/packages/plugin-kiro-ide/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-kiro-ide/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-kiro-ide/tsconfig.json b/packages/plugin-kiro-ide/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-kiro-ide/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-kiro-ide/tsconfig.lib.json b/packages/plugin-kiro-ide/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-kiro-ide/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-kiro-ide/tsconfig.test.json b/packages/plugin-kiro-ide/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-kiro-ide/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-kiro-ide/tsdown.config.ts b/packages/plugin-kiro-ide/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-kiro-ide/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-kiro-ide/vite.config.ts b/packages/plugin-kiro-ide/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-kiro-ide/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-kiro-ide/vitest.config.ts b/packages/plugin-kiro-ide/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-kiro-ide/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-openai-codex-cli/eslint.config.ts b/packages/plugin-openai-codex-cli/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-openai-codex-cli/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-openai-codex-cli/package.json b/packages/plugin-openai-codex-cli/package.json deleted file mode 100644 index c8267ad9..00000000 --- a/packages/plugin-openai-codex-cli/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@truenine/plugin-openai-codex-cli", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "OpenAI Codex CLI output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-openai-codex-cli/tsconfig.eslint.json b/packages/plugin-openai-codex-cli/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-openai-codex-cli/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-openai-codex-cli/tsconfig.json b/packages/plugin-openai-codex-cli/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-openai-codex-cli/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-openai-codex-cli/tsconfig.lib.json b/packages/plugin-openai-codex-cli/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-openai-codex-cli/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-openai-codex-cli/tsconfig.test.json b/packages/plugin-openai-codex-cli/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-openai-codex-cli/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-openai-codex-cli/tsdown.config.ts b/packages/plugin-openai-codex-cli/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-openai-codex-cli/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-openai-codex-cli/vite.config.ts b/packages/plugin-openai-codex-cli/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-openai-codex-cli/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-openai-codex-cli/vitest.config.ts b/packages/plugin-openai-codex-cli/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-openai-codex-cli/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-opencode-cli/eslint.config.ts b/packages/plugin-opencode-cli/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-opencode-cli/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-opencode-cli/package.json b/packages/plugin-opencode-cli/package.json deleted file mode 100644 index 4617b630..00000000 --- a/packages/plugin-opencode-cli/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@truenine/plugin-opencode-cli", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Opencode CLI output plugin", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "jsonc-parser": "catalog:" - } -} diff --git a/packages/plugin-opencode-cli/tsconfig.eslint.json b/packages/plugin-opencode-cli/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-opencode-cli/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-opencode-cli/tsconfig.json b/packages/plugin-opencode-cli/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-opencode-cli/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-opencode-cli/tsconfig.lib.json b/packages/plugin-opencode-cli/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-opencode-cli/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-opencode-cli/tsconfig.test.json b/packages/plugin-opencode-cli/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-opencode-cli/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-opencode-cli/tsdown.config.ts b/packages/plugin-opencode-cli/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-opencode-cli/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-opencode-cli/vite.config.ts b/packages/plugin-opencode-cli/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-opencode-cli/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-opencode-cli/vitest.config.ts b/packages/plugin-opencode-cli/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-opencode-cli/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-output-shared/eslint.config.ts b/packages/plugin-output-shared/eslint.config.ts deleted file mode 100644 index 2b7b269c..00000000 --- a/packages/plugin-output-shared/eslint.config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' - -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: { - allowDefaultProject: true - } - }, - ignores: [ - '.turbo/**', - '*.md', - '**/*.md' - ] -}) - -export default config as unknown diff --git a/packages/plugin-output-shared/package.json b/packages/plugin-output-shared/package.json deleted file mode 100644 index fe0b251e..00000000 --- a/packages/plugin-output-shared/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "@truenine/plugin-output-shared", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Shared abstract base classes and utilities for memory-sync output plugins", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - }, - "./utils": { - "types": "./dist/utils/index.d.mts", - "import": "./dist/utils/index.mjs" - }, - "./registry": { - "types": "./dist/registry/index.d.mts", - "import": "./dist/registry/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": { - "@truenine/config": "workspace:*", - "picomatch": "catalog:" - }, - "devDependencies": { - "@truenine/desk-paths": "workspace:*", - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-input-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "fast-check": "catalog:", - "fast-glob": "catalog:" - } -} diff --git a/packages/plugin-output-shared/tsconfig.eslint.json b/packages/plugin-output-shared/tsconfig.eslint.json deleted file mode 100644 index 585b38ee..00000000 --- a/packages/plugin-output-shared/tsconfig.eslint.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true, - "skipLibCheck": true - }, - "include": [ - "src/**/*.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "env.d.ts", - "eslint.config.ts", - "tsdown.config.ts", - "vite.config.ts", - "vitest.config.ts" - ], - "exclude": [ - "../node_modules", - "dist", - "coverage" - ] -} diff --git a/packages/plugin-output-shared/tsconfig.json b/packages/plugin-output-shared/tsconfig.json deleted file mode 100644 index 03cd50a3..00000000 --- a/packages/plugin-output-shared/tsconfig.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": [ - "ESNext" - ], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { - "@/*": [ - "./src/*" - ] - }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": [ - "src/**/*", - "env.d.ts", - "eslint.config.ts", - "tsdown.config.ts", - "vite.config.ts", - "vitest.config.ts" - ], - "exclude": [ - "../node_modules", - "dist" - ] -} diff --git a/packages/plugin-output-shared/tsconfig.lib.json b/packages/plugin-output-shared/tsconfig.lib.json deleted file mode 100644 index b2449b37..00000000 --- a/packages/plugin-output-shared/tsconfig.lib.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "noEmit": false, - "outDir": "../dist", - "skipLibCheck": true - }, - "include": [ - "src/**/*", - "env.d.ts" - ], - "exclude": [ - "../node_modules", - "dist", - "**/*.spec.ts", - "**/*.test.ts" - ] -} diff --git a/packages/plugin-output-shared/tsconfig.test.json b/packages/plugin-output-shared/tsconfig.test.json deleted file mode 100644 index 65c3c9ad..00000000 --- a/packages/plugin-output-shared/tsconfig.test.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "lib": [ - "ESNext", - "DOM" - ], - "types": [ - "vitest/globals", - "node" - ] - }, - "include": [ - "src/**/*.spec.ts", - "src/**/*.test.ts", - "vitest.config.ts", - "vite.config.ts", - "env.d.ts" - ], - "exclude": [ - "../node_modules", - "dist" - ] -} diff --git a/packages/plugin-output-shared/tsdown.config.ts b/packages/plugin-output-shared/tsdown.config.ts deleted file mode 100644 index 066c0701..00000000 --- a/packages/plugin-output-shared/tsdown.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: [ - './src/index.ts', - './src/utils/index.ts', - './src/registry/index.ts', - '!**/*.{spec,test}.*' - ], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: { - '@': resolve('src') - }, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-output-shared/vite.config.ts b/packages/plugin-output-shared/vite.config.ts deleted file mode 100644 index 2dcc5646..00000000 --- a/packages/plugin-output-shared/vite.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) - } - } -}) diff --git a/packages/plugin-output-shared/vitest.config.ts b/packages/plugin-output-shared/vitest.config.ts deleted file mode 100644 index a06eb3a7..00000000 --- a/packages/plugin-output-shared/vitest.config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {fileURLToPath} from 'node:url' - -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' - -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: { - enabled: true, - tsconfig: './tsconfig.test.json' - }, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: [ - 'node_modules/', - 'dist/', - '**/*.test.ts', - '**/*.property.test.ts' - ] - } - } - }) -) diff --git a/packages/plugin-qoder-ide/eslint.config.ts b/packages/plugin-qoder-ide/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-qoder-ide/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-qoder-ide/package.json b/packages/plugin-qoder-ide/package.json deleted file mode 100644 index a9a53f20..00000000 --- a/packages/plugin-qoder-ide/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@truenine/plugin-qoder-ide", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Qoder IDE output plugin", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "picomatch": "catalog:" - } -} diff --git a/packages/plugin-qoder-ide/tsconfig.eslint.json b/packages/plugin-qoder-ide/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-qoder-ide/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-qoder-ide/tsconfig.json b/packages/plugin-qoder-ide/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-qoder-ide/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-qoder-ide/tsconfig.lib.json b/packages/plugin-qoder-ide/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-qoder-ide/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-qoder-ide/tsconfig.test.json b/packages/plugin-qoder-ide/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-qoder-ide/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-qoder-ide/tsdown.config.ts b/packages/plugin-qoder-ide/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-qoder-ide/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-qoder-ide/vite.config.ts b/packages/plugin-qoder-ide/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-qoder-ide/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-qoder-ide/vitest.config.ts b/packages/plugin-qoder-ide/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-qoder-ide/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-readme/eslint.config.ts b/packages/plugin-readme/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-readme/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-readme/package.json b/packages/plugin-readme/package.json deleted file mode 100644 index 7bbc6541..00000000 --- a/packages/plugin-readme/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-readme", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "README.md output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-readme/tsconfig.eslint.json b/packages/plugin-readme/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-readme/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-readme/tsconfig.json b/packages/plugin-readme/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-readme/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-readme/tsconfig.lib.json b/packages/plugin-readme/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-readme/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-readme/tsconfig.test.json b/packages/plugin-readme/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-readme/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-readme/tsdown.config.ts b/packages/plugin-readme/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-readme/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-readme/vite.config.ts b/packages/plugin-readme/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-readme/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-readme/vitest.config.ts b/packages/plugin-readme/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-readme/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-shared/eslint.config.ts b/packages/plugin-shared/eslint.config.ts deleted file mode 100644 index 2b7b269c..00000000 --- a/packages/plugin-shared/eslint.config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' - -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: { - allowDefaultProject: true - } - }, - ignores: [ - '.turbo/**', - '*.md', - '**/*.md' - ] -}) - -export default config as unknown diff --git a/packages/plugin-shared/package.json b/packages/plugin-shared/package.json deleted file mode 100644 index d5d1d23c..00000000 --- a/packages/plugin-shared/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@truenine/plugin-shared", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Shared types, enums, errors, and base classes for memory-sync plugins", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - }, - "./types": { - "types": "./dist/types/index.d.mts", - "import": "./dist/types/index.mjs" - }, - "./testing": { - "types": "./dist/testing/index.d.mts", - "import": "./dist/testing/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": { - "zod": "catalog:" - }, - "devDependencies": { - "@truenine/init-bundle": "workspace:*", - "@truenine/logger": "workspace:*", - "@truenine/md-compiler": "workspace:*", - "fast-check": "catalog:", - "fast-glob": "catalog:" - } -} diff --git a/packages/plugin-shared/tsconfig.eslint.json b/packages/plugin-shared/tsconfig.eslint.json deleted file mode 100644 index 585b38ee..00000000 --- a/packages/plugin-shared/tsconfig.eslint.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true, - "skipLibCheck": true - }, - "include": [ - "src/**/*.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "env.d.ts", - "eslint.config.ts", - "tsdown.config.ts", - "vite.config.ts", - "vitest.config.ts" - ], - "exclude": [ - "../node_modules", - "dist", - "coverage" - ] -} diff --git a/packages/plugin-shared/tsconfig.json b/packages/plugin-shared/tsconfig.json deleted file mode 100644 index 03cd50a3..00000000 --- a/packages/plugin-shared/tsconfig.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": [ - "ESNext" - ], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { - "@/*": [ - "./src/*" - ] - }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": [ - "src/**/*", - "env.d.ts", - "eslint.config.ts", - "tsdown.config.ts", - "vite.config.ts", - "vitest.config.ts" - ], - "exclude": [ - "../node_modules", - "dist" - ] -} diff --git a/packages/plugin-shared/tsconfig.lib.json b/packages/plugin-shared/tsconfig.lib.json deleted file mode 100644 index b2449b37..00000000 --- a/packages/plugin-shared/tsconfig.lib.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "composite": true, - "rootDir": "./src", - "noEmit": false, - "outDir": "../dist", - "skipLibCheck": true - }, - "include": [ - "src/**/*", - "env.d.ts" - ], - "exclude": [ - "../node_modules", - "dist", - "**/*.spec.ts", - "**/*.test.ts" - ] -} diff --git a/packages/plugin-shared/tsconfig.test.json b/packages/plugin-shared/tsconfig.test.json deleted file mode 100644 index 65c3c9ad..00000000 --- a/packages/plugin-shared/tsconfig.test.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { - "lib": [ - "ESNext", - "DOM" - ], - "types": [ - "vitest/globals", - "node" - ] - }, - "include": [ - "src/**/*.spec.ts", - "src/**/*.test.ts", - "vitest.config.ts", - "vite.config.ts", - "env.d.ts" - ], - "exclude": [ - "../node_modules", - "dist" - ] -} diff --git a/packages/plugin-shared/tsdown.config.ts b/packages/plugin-shared/tsdown.config.ts deleted file mode 100644 index acb18d61..00000000 --- a/packages/plugin-shared/tsdown.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: [ - './src/index.ts', - './src/types/index.ts', - './src/testing/index.ts', - '!**/*.{spec,test}.*' - ], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: { - '@': resolve('src') - }, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-shared/vite.config.ts b/packages/plugin-shared/vite.config.ts deleted file mode 100644 index 2dcc5646..00000000 --- a/packages/plugin-shared/vite.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: { - '@': fileURLToPath(new URL('./src', import.meta.url)) - } - } -}) diff --git a/packages/plugin-shared/vitest.config.ts b/packages/plugin-shared/vitest.config.ts deleted file mode 100644 index a06eb3a7..00000000 --- a/packages/plugin-shared/vitest.config.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {fileURLToPath} from 'node:url' - -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' - -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: { - enabled: true, - tsconfig: './tsconfig.test.json' - }, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: [ - 'node_modules/', - 'dist/', - '**/*.test.ts', - '**/*.property.test.ts' - ] - } - } - }) -) diff --git a/packages/plugin-trae-ide/eslint.config.ts b/packages/plugin-trae-ide/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-trae-ide/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-trae-ide/package.json b/packages/plugin-trae-ide/package.json deleted file mode 100644 index b02b4ee8..00000000 --- a/packages/plugin-trae-ide/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-trae-ide", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Trae IDE output plugin", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-trae-ide/tsconfig.eslint.json b/packages/plugin-trae-ide/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-trae-ide/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-trae-ide/tsconfig.json b/packages/plugin-trae-ide/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-trae-ide/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-trae-ide/tsconfig.lib.json b/packages/plugin-trae-ide/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-trae-ide/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-trae-ide/tsconfig.test.json b/packages/plugin-trae-ide/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-trae-ide/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-trae-ide/tsdown.config.ts b/packages/plugin-trae-ide/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-trae-ide/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-trae-ide/vite.config.ts b/packages/plugin-trae-ide/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-trae-ide/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-trae-ide/vitest.config.ts b/packages/plugin-trae-ide/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-trae-ide/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-vscode/eslint.config.ts b/packages/plugin-vscode/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-vscode/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-vscode/package.json b/packages/plugin-vscode/package.json deleted file mode 100644 index ffce1870..00000000 --- a/packages/plugin-vscode/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-vscode", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "VS Code IDE config output plugin for memory-sync", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-vscode/tsconfig.eslint.json b/packages/plugin-vscode/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-vscode/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-vscode/tsconfig.json b/packages/plugin-vscode/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-vscode/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-vscode/tsconfig.lib.json b/packages/plugin-vscode/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-vscode/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-vscode/tsconfig.test.json b/packages/plugin-vscode/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-vscode/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-vscode/tsdown.config.ts b/packages/plugin-vscode/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-vscode/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-vscode/vite.config.ts b/packages/plugin-vscode/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-vscode/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-vscode/vitest.config.ts b/packages/plugin-vscode/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-vscode/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-warp-ide/eslint.config.ts b/packages/plugin-warp-ide/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-warp-ide/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-warp-ide/package.json b/packages/plugin-warp-ide/package.json deleted file mode 100644 index c0e6a973..00000000 --- a/packages/plugin-warp-ide/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@truenine/plugin-warp-ide", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Warp IDE output plugin", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*" - } -} diff --git a/packages/plugin-warp-ide/tsconfig.eslint.json b/packages/plugin-warp-ide/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-warp-ide/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-warp-ide/tsconfig.json b/packages/plugin-warp-ide/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-warp-ide/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-warp-ide/tsconfig.lib.json b/packages/plugin-warp-ide/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-warp-ide/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-warp-ide/tsconfig.test.json b/packages/plugin-warp-ide/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-warp-ide/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-warp-ide/tsdown.config.ts b/packages/plugin-warp-ide/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-warp-ide/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-warp-ide/vite.config.ts b/packages/plugin-warp-ide/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-warp-ide/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-warp-ide/vitest.config.ts b/packages/plugin-warp-ide/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-warp-ide/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/packages/plugin-windsurf/eslint.config.ts b/packages/plugin-windsurf/eslint.config.ts deleted file mode 100644 index f7be876f..00000000 --- a/packages/plugin-windsurf/eslint.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {dirname, resolve} from 'node:path' -import {fileURLToPath} from 'node:url' -import eslint10 from '@truenine/eslint10-config' - -const configDir = dirname(fileURLToPath(import.meta.url)) - -const config = eslint10({ - type: 'lib', - typescript: { - strictTypescriptEslint: true, - tsconfigPath: resolve(configDir, 'tsconfig.eslint.json'), - parserOptions: {allowDefaultProject: true} - }, - ignores: ['.turbo/**', '*.md', '**/*.md'] -}) - -export default config as unknown diff --git a/packages/plugin-windsurf/package.json b/packages/plugin-windsurf/package.json deleted file mode 100644 index 4b69a2c7..00000000 --- a/packages/plugin-windsurf/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "@truenine/plugin-windsurf", - "type": "module", - "version": "2026.10224.10619", - "private": true, - "description": "Windsurf IDE output plugin", - "exports": { - "./package.json": "./package.json", - ".": { - "types": "./dist/index.d.mts", - "import": "./dist/index.mjs" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.mts", - "scripts": { - "build": "tsdown", - "lint": "eslint --cache .", - "typecheck": "tsc --noEmit -p tsconfig.lib.json", - "check": "run-p typecheck lint", - "lintfix": "eslint --fix --cache .", - "test": "vitest run", - "prepublishOnly": "run-s build" - }, - "dependencies": {}, - "devDependencies": { - "@truenine/md-compiler": "workspace:*", - "@truenine/plugin-output-shared": "workspace:*", - "@truenine/plugin-shared": "workspace:*", - "picomatch": "catalog:" - } -} diff --git a/packages/plugin-windsurf/tsconfig.eslint.json b/packages/plugin-windsurf/tsconfig.eslint.json deleted file mode 100644 index 88bad67b..00000000 --- a/packages/plugin-windsurf/tsconfig.eslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "noEmit": true, "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist", "coverage"] -} diff --git a/packages/plugin-windsurf/tsconfig.json b/packages/plugin-windsurf/tsconfig.json deleted file mode 100644 index 9b2710e7..00000000 --- a/packages/plugin-windsurf/tsconfig.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "noUncheckedSideEffectImports": true, - "incremental": true, - "composite": false, - "target": "ESNext", - "lib": ["ESNext"], - "moduleDetection": "force", - "useDefineForClassFields": true, - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "Bundler", - "paths": { "@/*": ["./src/*"] }, - "resolveJsonModule": true, - "allowImportingTsExtensions": true, - "strict": true, - "strictBindCallApply": true, - "strictFunctionTypes": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "alwaysStrict": true, - "exactOptionalPropertyTypes": true, - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noPropertyAccessFromIndexSignature": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "useUnknownInCatchVariables": true, - "declaration": true, - "declarationMap": true, - "importHelpers": true, - "newLine": "lf", - "noEmit": true, - "noEmitHelpers": false, - "removeComments": false, - "sourceMap": true, - "stripInternal": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "isolatedModules": true, - "verbatimModuleSyntax": true, - "skipLibCheck": true - }, - "include": ["src/**/*", "env.d.ts", "eslint.config.ts", "tsdown.config.ts", "vite.config.ts", "vitest.config.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-windsurf/tsconfig.lib.json b/packages/plugin-windsurf/tsconfig.lib.json deleted file mode 100644 index e2395022..00000000 --- a/packages/plugin-windsurf/tsconfig.lib.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "composite": true, "rootDir": "./src", "noEmit": false, "outDir": "../dist", "skipLibCheck": true }, - "include": ["src/**/*", "env.d.ts"], - "exclude": ["../node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] -} diff --git a/packages/plugin-windsurf/tsconfig.test.json b/packages/plugin-windsurf/tsconfig.test.json deleted file mode 100644 index c59a650c..00000000 --- a/packages/plugin-windsurf/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "extends": "./tsconfig.json", - "compilerOptions": { "lib": ["ESNext", "DOM"], "types": ["vitest/globals", "node"] }, - "include": ["src/**/*.spec.ts", "src/**/*.test.ts", "vitest.config.ts", "vite.config.ts", "env.d.ts"], - "exclude": ["../node_modules", "dist"] -} diff --git a/packages/plugin-windsurf/tsdown.config.ts b/packages/plugin-windsurf/tsdown.config.ts deleted file mode 100644 index 63062043..00000000 --- a/packages/plugin-windsurf/tsdown.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {resolve} from 'node:path' -import {defineConfig} from 'tsdown' - -export default defineConfig([ - { - entry: ['./src/index.ts', '!**/*.{spec,test}.*'], - platform: 'node', - sourcemap: false, - unbundle: false, - inlineOnly: false, - alias: {'@': resolve('src')}, - format: ['esm'], - minify: false, - dts: {sourcemap: false} - } -]) diff --git a/packages/plugin-windsurf/vite.config.ts b/packages/plugin-windsurf/vite.config.ts deleted file mode 100644 index 8e7dba8b..00000000 --- a/packages/plugin-windsurf/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {fileURLToPath, URL} from 'node:url' -import {defineConfig} from 'vite' - -export default defineConfig({ - resolve: { - alias: {'@': fileURLToPath(new URL('./src', import.meta.url))} - } -}) diff --git a/packages/plugin-windsurf/vitest.config.ts b/packages/plugin-windsurf/vitest.config.ts deleted file mode 100644 index e7fbb710..00000000 --- a/packages/plugin-windsurf/vitest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {fileURLToPath} from 'node:url' -import {configDefaults, defineConfig, mergeConfig} from 'vitest/config' -import viteConfig from './vite.config' - -export default mergeConfig( - viteConfig, - defineConfig({ - test: { - environment: 'node', - exclude: [...configDefaults.exclude, 'e2e/*'], - root: fileURLToPath(new URL('./', import.meta.url)), - typecheck: {enabled: true, tsconfig: './tsconfig.test.json'}, - testTimeout: 30000, - onConsoleLog: () => false, - passWithNoTests: true, - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: ['node_modules/', 'dist/', '**/*.test.ts', '**/*.property.test.ts'] - } - } - }) -) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6a958a12..5dd5c694 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -258,9 +258,6 @@ importers: specifier: 'catalog:' version: 4.3.6 devDependencies: - '@truenine/desk-paths': - specifier: workspace:* - version: link:../packages/desk-paths '@truenine/init-bundle': specifier: workspace:* version: link:../libraries/init-bundle @@ -270,129 +267,6 @@ importers: '@truenine/md-compiler': specifier: workspace:* version: link:../libraries/md-compiler - '@truenine/plugin-agentskills-compact': - specifier: workspace:* - version: link:../packages/plugin-agentskills-compact - '@truenine/plugin-agentsmd': - specifier: workspace:* - version: link:../packages/plugin-agentsmd - '@truenine/plugin-antigravity': - specifier: workspace:* - version: link:../packages/plugin-antigravity - '@truenine/plugin-claude-code-cli': - specifier: workspace:* - version: link:../packages/plugin-claude-code-cli - '@truenine/plugin-cursor': - specifier: workspace:* - version: link:../packages/plugin-cursor - '@truenine/plugin-droid-cli': - specifier: workspace:* - version: link:../packages/plugin-droid-cli - '@truenine/plugin-editorconfig': - specifier: workspace:* - version: link:../packages/plugin-editorconfig - '@truenine/plugin-gemini-cli': - specifier: workspace:* - version: link:../packages/plugin-gemini-cli - '@truenine/plugin-git-exclude': - specifier: workspace:* - version: link:../packages/plugin-git-exclude - '@truenine/plugin-input-agentskills': - specifier: workspace:* - version: link:../packages/plugin-input-agentskills - '@truenine/plugin-input-editorconfig': - specifier: workspace:* - version: link:../packages/plugin-input-editorconfig - '@truenine/plugin-input-fast-command': - specifier: workspace:* - version: link:../packages/plugin-input-fast-command - '@truenine/plugin-input-git-exclude': - specifier: workspace:* - version: link:../packages/plugin-input-git-exclude - '@truenine/plugin-input-gitignore': - specifier: workspace:* - version: link:../packages/plugin-input-gitignore - '@truenine/plugin-input-global-memory': - specifier: workspace:* - version: link:../packages/plugin-input-global-memory - '@truenine/plugin-input-jetbrains-config': - specifier: workspace:* - version: link:../packages/plugin-input-jetbrains-config - '@truenine/plugin-input-md-cleanup-effect': - specifier: workspace:* - version: link:../packages/plugin-input-md-cleanup-effect - '@truenine/plugin-input-orphan-cleanup-effect': - specifier: workspace:* - version: link:../packages/plugin-input-orphan-cleanup-effect - '@truenine/plugin-input-project-prompt': - specifier: workspace:* - version: link:../packages/plugin-input-project-prompt - '@truenine/plugin-input-readme': - specifier: workspace:* - version: link:../packages/plugin-input-readme - '@truenine/plugin-input-rule': - specifier: workspace:* - version: link:../packages/plugin-input-rule - '@truenine/plugin-input-shadow-project': - specifier: workspace:* - version: link:../packages/plugin-input-shadow-project - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../packages/plugin-input-shared - '@truenine/plugin-input-shared-ignore': - specifier: workspace:* - version: link:../packages/plugin-input-shared-ignore - '@truenine/plugin-input-skill-sync-effect': - specifier: workspace:* - version: link:../packages/plugin-input-skill-sync-effect - '@truenine/plugin-input-subagent': - specifier: workspace:* - version: link:../packages/plugin-input-subagent - '@truenine/plugin-input-vscode-config': - specifier: workspace:* - version: link:../packages/plugin-input-vscode-config - '@truenine/plugin-input-workspace': - specifier: workspace:* - version: link:../packages/plugin-input-workspace - '@truenine/plugin-jetbrains-ai-codex': - specifier: workspace:* - version: link:../packages/plugin-jetbrains-ai-codex - '@truenine/plugin-jetbrains-codestyle': - specifier: workspace:* - version: link:../packages/plugin-jetbrains-codestyle - '@truenine/plugin-kiro-ide': - specifier: workspace:* - version: link:../packages/plugin-kiro-ide - '@truenine/plugin-openai-codex-cli': - specifier: workspace:* - version: link:../packages/plugin-openai-codex-cli - '@truenine/plugin-opencode-cli': - specifier: workspace:* - version: link:../packages/plugin-opencode-cli - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../packages/plugin-output-shared - '@truenine/plugin-qoder-ide': - specifier: workspace:* - version: link:../packages/plugin-qoder-ide - '@truenine/plugin-readme': - specifier: workspace:* - version: link:../packages/plugin-readme - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../packages/plugin-shared - '@truenine/plugin-trae-ide': - specifier: workspace:* - version: link:../packages/plugin-trae-ide - '@truenine/plugin-vscode': - specifier: workspace:* - version: link:../packages/plugin-vscode - '@truenine/plugin-warp-ide': - specifier: workspace:* - version: link:../packages/plugin-warp-ide - '@truenine/plugin-windsurf': - specifier: workspace:* - version: link:../packages/plugin-windsurf '@types/fs-extra': specifier: 'catalog:' version: 11.0.4 @@ -698,493 +572,6 @@ importers: specifier: 'catalog:' version: 4.0.18(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) - packages/desk-paths: {} - - packages/plugin-agentskills-compact: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-agentsmd: - devDependencies: - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-antigravity: - devDependencies: - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-claude-code-cli: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-cursor: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - picomatch: - specifier: 'catalog:' - version: 4.0.3 - - packages/plugin-droid-cli: - devDependencies: - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-editorconfig: - devDependencies: - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-gemini-cli: - devDependencies: - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-git-exclude: - devDependencies: - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-agentskills: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-editorconfig: - devDependencies: - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-fast-command: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-git-exclude: - devDependencies: - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-gitignore: - devDependencies: - '@truenine/init-bundle': - specifier: workspace:* - version: link:../../libraries/init-bundle - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-global-memory: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-jetbrains-config: - devDependencies: - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-md-cleanup-effect: - devDependencies: - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - fast-glob: - specifier: 'catalog:' - version: 3.3.3 - - packages/plugin-input-orphan-cleanup-effect: - devDependencies: - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - fast-glob: - specifier: 'catalog:' - version: 3.3.3 - - packages/plugin-input-project-prompt: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-readme: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-rule: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-shadow-project: - devDependencies: - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - jsonc-parser: - specifier: 'catalog:' - version: 3.3.1 - - packages/plugin-input-shared: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - fast-glob: - specifier: 'catalog:' - version: 3.3.3 - - packages/plugin-input-shared-ignore: - devDependencies: - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-skill-sync-effect: - devDependencies: - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - fast-glob: - specifier: 'catalog:' - version: 3.3.3 - - packages/plugin-input-subagent: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-vscode-config: - devDependencies: - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-input-workspace: - devDependencies: - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-jetbrains-ai-codex: - devDependencies: - '@truenine/desk-paths': - specifier: workspace:* - version: link:../desk-paths - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-jetbrains-codestyle: - devDependencies: - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-kiro-ide: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - picomatch: - specifier: 'catalog:' - version: 4.0.3 - - packages/plugin-openai-codex-cli: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-opencode-cli: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - jsonc-parser: - specifier: 'catalog:' - version: 3.3.1 - - packages/plugin-output-shared: - dependencies: - '@truenine/config': - specifier: workspace:* - version: link:../../libraries/config - picomatch: - specifier: 'catalog:' - version: 4.0.3 - devDependencies: - '@truenine/desk-paths': - specifier: workspace:* - version: link:../desk-paths - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-input-shared': - specifier: workspace:* - version: link:../plugin-input-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - fast-check: - specifier: 'catalog:' - version: 4.5.3 - fast-glob: - specifier: 'catalog:' - version: 3.3.3 - - packages/plugin-qoder-ide: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - picomatch: - specifier: 'catalog:' - version: 4.0.3 - - packages/plugin-readme: - devDependencies: - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-shared: - dependencies: - zod: - specifier: 'catalog:' - version: 4.3.6 - devDependencies: - '@truenine/init-bundle': - specifier: workspace:* - version: link:../../libraries/init-bundle - '@truenine/logger': - specifier: workspace:* - version: link:../../libraries/logger - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - fast-check: - specifier: 'catalog:' - version: 4.5.3 - fast-glob: - specifier: 'catalog:' - version: 3.3.3 - - packages/plugin-trae-ide: - devDependencies: - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-vscode: - devDependencies: - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-warp-ide: - devDependencies: - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - - packages/plugin-windsurf: - devDependencies: - '@truenine/md-compiler': - specifier: workspace:* - version: link:../../libraries/md-compiler - '@truenine/plugin-output-shared': - specifier: workspace:* - version: link:../plugin-output-shared - '@truenine/plugin-shared': - specifier: workspace:* - version: link:../plugin-shared - picomatch: - specifier: 'catalog:' - version: 4.0.3 - packages: '@antfu/eslint-config@6.7.1': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index eb31ff91..d8d1531c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,7 +1,6 @@ packages: - cli - cli/npm/* - - packages/* - libraries/* - libraries/logger/npm/* - libraries/md-compiler/npm/*