squish-memory 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.mcp.example +18 -11
- package/README.md +59 -24
- package/bin/squish-add.mjs +32 -0
- package/bin/squish-rm.mjs +21 -0
- package/config/plugin-manifest.json +1 -1
- package/config/settings.json +51 -0
- package/dist/api/web/web.js +479 -452
- package/dist/commands/mcp-server.js +7 -3
- package/dist/config.d.ts +10 -10
- package/dist/config.js +78 -23
- package/dist/core/embeddings.d.ts +1 -1
- package/dist/core/embeddings.js +10 -67
- package/dist/core/local-embeddings.d.ts +3 -11
- package/dist/core/local-embeddings.js +2 -76
- package/dist/core/mcp/server.js +27 -1
- package/dist/core/mcp/types.d.ts +4 -4
- package/dist/core/memory/context-collector.js +3 -2
- package/dist/core/memory/feedback-tracker.js +10 -6
- package/dist/core/memory/hybrid-search.js +32 -32
- package/dist/core/memory/memories.js +55 -52
- package/dist/core/memory/query-rewriter.js +9 -9
- package/dist/core/memory/stats.js +5 -5
- package/dist/core/namespaces/index.js +20 -11
- package/dist/core/scheduler/cron-scheduler.js +78 -20
- package/dist/core/scheduler/job-runner.js +8 -5
- package/dist/core/search/conversations.js +33 -33
- package/dist/core/session-hooks/self-iteration-job.js +43 -39
- package/dist/core/session-hooks/session-hooks.js +6 -3
- package/dist/core/tracing/collector.js +25 -13
- package/dist/db/adapter.d.ts +6 -1
- package/dist/db/adapter.js +122 -126
- package/dist/db/bootstrap.js +622 -548
- package/dist/db/index.d.ts +5 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +195 -49
- package/generated/mcp/manifest.json +23 -23
- package/package.json +72 -59
- package/scripts/install-interactive.mjs +7 -4
- package/skills/memory-guide/SKILL.md +94 -18
- package/skills/squish-cli/SKILL.md +61 -21
- package/skills/squish-mcp/SKILL.md +46 -2
- package/skills/squish-memory/SKILL.md +30 -16
- package/dist/algorithms/analytics/token-estimator.d.ts.map +0 -1
- package/dist/algorithms/analytics/token-estimator.js.map +0 -1
- package/dist/algorithms/detection/hash-filters.d.ts.map +0 -1
- package/dist/algorithms/detection/hash-filters.js.map +0 -1
- package/dist/algorithms/detection/semantic-ranker.d.ts.map +0 -1
- package/dist/algorithms/detection/semantic-ranker.js.map +0 -1
- package/dist/algorithms/detection/two-stage-detector.d.ts.map +0 -1
- package/dist/algorithms/detection/two-stage-detector.js.map +0 -1
- package/dist/algorithms/handlers/approve-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/approve-merge.js.map +0 -1
- package/dist/algorithms/handlers/detect-duplicates.d.ts.map +0 -1
- package/dist/algorithms/handlers/detect-duplicates.js.map +0 -1
- package/dist/algorithms/handlers/get-stats.d.ts.map +0 -1
- package/dist/algorithms/handlers/get-stats.js.map +0 -1
- package/dist/algorithms/handlers/list-proposals.d.ts.map +0 -1
- package/dist/algorithms/handlers/list-proposals.js.map +0 -1
- package/dist/algorithms/handlers/preview-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/preview-merge.js.map +0 -1
- package/dist/algorithms/handlers/reject-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/reject-merge.js.map +0 -1
- package/dist/algorithms/handlers/reverse-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/reverse-merge.js.map +0 -1
- package/dist/algorithms/safety/safety-checks.d.ts.map +0 -1
- package/dist/algorithms/safety/safety-checks.js.map +0 -1
- package/dist/algorithms/strategies/merge-strategies.d.ts.map +0 -1
- package/dist/algorithms/strategies/merge-strategies.js.map +0 -1
- package/dist/algorithms/utils/response-builder.d.ts.map +0 -1
- package/dist/algorithms/utils/response-builder.js.map +0 -1
- package/dist/api/web/index.d.ts.map +0 -1
- package/dist/api/web/index.js.map +0 -1
- package/dist/api/web/web-server.d.ts.map +0 -1
- package/dist/api/web/web-server.js.map +0 -1
- package/dist/api/web/web.d.ts.map +0 -1
- package/dist/api/web/web.js.map +0 -1
- package/dist/commands/managed-sync.d.ts.map +0 -1
- package/dist/commands/managed-sync.js.map +0 -1
- package/dist/commands/mcp-server.d.ts.map +0 -1
- package/dist/commands/mcp-server.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/core/agent-memory.d.ts.map +0 -1
- package/dist/core/agent-memory.js.map +0 -1
- package/dist/core/associations.d.ts.map +0 -1
- package/dist/core/associations.js.map +0 -1
- package/dist/core/cache.d.ts.map +0 -1
- package/dist/core/cache.js.map +0 -1
- package/dist/core/consolidation.d.ts.map +0 -1
- package/dist/core/consolidation.js.map +0 -1
- package/dist/core/context-paging.d.ts.map +0 -1
- package/dist/core/context-paging.js.map +0 -1
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js.map +0 -1
- package/dist/core/core-memory.d.ts.map +0 -1
- package/dist/core/core-memory.js.map +0 -1
- package/dist/core/database.d.ts.map +0 -1
- package/dist/core/database.js.map +0 -1
- package/dist/core/embeddings/google-multimodal.d.ts.map +0 -1
- package/dist/core/embeddings/google-multimodal.js.map +0 -1
- package/dist/core/embeddings/qmd-client.d.ts.map +0 -1
- package/dist/core/embeddings/qmd-client.js.map +0 -1
- package/dist/core/embeddings.d.ts.map +0 -1
- package/dist/core/embeddings.js.map +0 -1
- package/dist/core/governance.d.ts.map +0 -1
- package/dist/core/governance.js.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/core/layers/generator.d.ts.map +0 -1
- package/dist/core/layers/generator.js.map +0 -1
- package/dist/core/lifecycle.d.ts.map +0 -1
- package/dist/core/lifecycle.js.map +0 -1
- package/dist/core/local-embeddings.d.ts.map +0 -1
- package/dist/core/local-embeddings.js.map +0 -1
- package/dist/core/logger.d.ts.map +0 -1
- package/dist/core/logger.js.map +0 -1
- package/dist/core/mcp/client.d.ts.map +0 -1
- package/dist/core/mcp/client.js.map +0 -1
- package/dist/core/mcp/index.d.ts.map +0 -1
- package/dist/core/mcp/index.js.map +0 -1
- package/dist/core/mcp/server.d.ts.map +0 -1
- package/dist/core/mcp/server.js.map +0 -1
- package/dist/core/mcp/standalone-server.d.ts.map +0 -1
- package/dist/core/mcp/standalone-server.js.map +0 -1
- package/dist/core/mcp/tools.d.ts.map +0 -1
- package/dist/core/mcp/tools.js.map +0 -1
- package/dist/core/mcp/types.d.ts.map +0 -1
- package/dist/core/mcp/types.js.map +0 -1
- package/dist/core/memory/bridge-discovery.d.ts.map +0 -1
- package/dist/core/memory/bridge-discovery.js.map +0 -1
- package/dist/core/memory/categorizer.d.ts.map +0 -1
- package/dist/core/memory/categorizer.js.map +0 -1
- package/dist/core/memory/conflict-detector.d.ts.map +0 -1
- package/dist/core/memory/conflict-detector.js.map +0 -1
- package/dist/core/memory/consolidation.d.ts.map +0 -1
- package/dist/core/memory/consolidation.js.map +0 -1
- package/dist/core/memory/context-collector.d.ts.map +0 -1
- package/dist/core/memory/context-collector.js.map +0 -1
- package/dist/core/memory/contradiction-resolver.d.ts.map +0 -1
- package/dist/core/memory/contradiction-resolver.js.map +0 -1
- package/dist/core/memory/edit-workflow.d.ts.map +0 -1
- package/dist/core/memory/edit-workflow.js.map +0 -1
- package/dist/core/memory/entity-extractor.d.ts.map +0 -1
- package/dist/core/memory/entity-extractor.js.map +0 -1
- package/dist/core/memory/entity-resolver.d.ts.map +0 -1
- package/dist/core/memory/entity-resolver.js.map +0 -1
- package/dist/core/memory/fact-extractor.d.ts.map +0 -1
- package/dist/core/memory/fact-extractor.js.map +0 -1
- package/dist/core/memory/feedback-tracker.d.ts.map +0 -1
- package/dist/core/memory/feedback-tracker.js.map +0 -1
- package/dist/core/memory/hybrid-retrieval.d.ts.map +0 -1
- package/dist/core/memory/hybrid-retrieval.js.map +0 -1
- package/dist/core/memory/hybrid-scorer.d.ts.map +0 -1
- package/dist/core/memory/hybrid-scorer.js.map +0 -1
- package/dist/core/memory/hybrid-search.d.ts.map +0 -1
- package/dist/core/memory/hybrid-search.js.map +0 -1
- package/dist/core/memory/importance.d.ts.map +0 -1
- package/dist/core/memory/importance.js.map +0 -1
- package/dist/core/memory/index.d.ts.map +0 -1
- package/dist/core/memory/index.js.map +0 -1
- package/dist/core/memory/memories.d.ts.map +0 -1
- package/dist/core/memory/memories.js.map +0 -1
- package/dist/core/memory/memory-manager.d.ts.map +0 -1
- package/dist/core/memory/memory-manager.js.map +0 -1
- package/dist/core/memory/progressive-disclosure.d.ts.map +0 -1
- package/dist/core/memory/progressive-disclosure.js.map +0 -1
- package/dist/core/memory/query-processor.d.ts.map +0 -1
- package/dist/core/memory/query-processor.js.map +0 -1
- package/dist/core/memory/query-rewriter.d.ts.map +0 -1
- package/dist/core/memory/query-rewriter.js.map +0 -1
- package/dist/core/memory/response-analyzer.d.ts.map +0 -1
- package/dist/core/memory/response-analyzer.js.map +0 -1
- package/dist/core/memory/serialization.d.ts.map +0 -1
- package/dist/core/memory/serialization.js.map +0 -1
- package/dist/core/memory/stats.d.ts.map +0 -1
- package/dist/core/memory/stats.js.map +0 -1
- package/dist/core/memory/telemetry.d.ts.map +0 -1
- package/dist/core/memory/telemetry.js.map +0 -1
- package/dist/core/memory/temporal-facts.d.ts.map +0 -1
- package/dist/core/memory/temporal-facts.js.map +0 -1
- package/dist/core/memory/temporal-parser.d.ts.map +0 -1
- package/dist/core/memory/temporal-parser.js.map +0 -1
- package/dist/core/memory/trigger-detector.d.ts.map +0 -1
- package/dist/core/memory/trigger-detector.js.map +0 -1
- package/dist/core/memory/write-gate.d.ts.map +0 -1
- package/dist/core/memory/write-gate.js.map +0 -1
- package/dist/core/namespaces/index.d.ts.map +0 -1
- package/dist/core/namespaces/index.js.map +0 -1
- package/dist/core/namespaces/uri-parser.d.ts.map +0 -1
- package/dist/core/namespaces/uri-parser.js.map +0 -1
- package/dist/core/observations.d.ts.map +0 -1
- package/dist/core/observations.js.map +0 -1
- package/dist/core/privacy.d.ts.map +0 -1
- package/dist/core/privacy.js.map +0 -1
- package/dist/core/projects.d.ts.map +0 -1
- package/dist/core/projects.js.map +0 -1
- package/dist/core/redis.d.ts.map +0 -1
- package/dist/core/redis.js.map +0 -1
- package/dist/core/requirements.d.ts.map +0 -1
- package/dist/core/requirements.js.map +0 -1
- package/dist/core/scheduler/cron-scheduler.d.ts.map +0 -1
- package/dist/core/scheduler/cron-scheduler.js.map +0 -1
- package/dist/core/scheduler/heartbeat.d.ts.map +0 -1
- package/dist/core/scheduler/heartbeat.js.map +0 -1
- package/dist/core/scheduler/index.d.ts.map +0 -1
- package/dist/core/scheduler/index.js.map +0 -1
- package/dist/core/scheduler/job-runner.d.ts.map +0 -1
- package/dist/core/scheduler/job-runner.js.map +0 -1
- package/dist/core/search/conversations.d.ts.map +0 -1
- package/dist/core/search/conversations.js.map +0 -1
- package/dist/core/search/entities.d.ts.map +0 -1
- package/dist/core/search/entities.js.map +0 -1
- package/dist/core/search/folder-context.d.ts.map +0 -1
- package/dist/core/search/folder-context.js.map +0 -1
- package/dist/core/search/index.d.ts.map +0 -1
- package/dist/core/search/index.js.map +0 -1
- package/dist/core/search/qmd-search.d.ts.map +0 -1
- package/dist/core/search/qmd-search.js.map +0 -1
- package/dist/core/secret-detector.d.ts.map +0 -1
- package/dist/core/secret-detector.js.map +0 -1
- package/dist/core/session/auto-load.d.ts.map +0 -1
- package/dist/core/session/auto-load.js.map +0 -1
- package/dist/core/session/index.d.ts.map +0 -1
- package/dist/core/session/index.js.map +0 -1
- package/dist/core/session/types.d.ts.map +0 -1
- package/dist/core/session/types.js.map +0 -1
- package/dist/core/session-hooks/self-iteration-job.d.ts.map +0 -1
- package/dist/core/session-hooks/self-iteration-job.js.map +0 -1
- package/dist/core/session-hooks/session-hooks.d.ts.map +0 -1
- package/dist/core/session-hooks/session-hooks.js.map +0 -1
- package/dist/core/snapshots/cleanup.d.ts.map +0 -1
- package/dist/core/snapshots/cleanup.js.map +0 -1
- package/dist/core/snapshots/comparison.d.ts.map +0 -1
- package/dist/core/snapshots/comparison.js.map +0 -1
- package/dist/core/snapshots/creation.d.ts.map +0 -1
- package/dist/core/snapshots/creation.js.map +0 -1
- package/dist/core/snapshots/retrieval.d.ts.map +0 -1
- package/dist/core/snapshots/retrieval.js.map +0 -1
- package/dist/core/snapshots/stats.d.ts.map +0 -1
- package/dist/core/snapshots/stats.js.map +0 -1
- package/dist/core/snapshots.d.ts.map +0 -1
- package/dist/core/snapshots.js.map +0 -1
- package/dist/core/summarization/cleanup.d.ts.map +0 -1
- package/dist/core/summarization/cleanup.js.map +0 -1
- package/dist/core/summarization/queries.d.ts.map +0 -1
- package/dist/core/summarization/queries.js.map +0 -1
- package/dist/core/summarization/stats.d.ts.map +0 -1
- package/dist/core/summarization/stats.js.map +0 -1
- package/dist/core/summarization/strategies.d.ts.map +0 -1
- package/dist/core/summarization/strategies.js.map +0 -1
- package/dist/core/summarization.d.ts.map +0 -1
- package/dist/core/summarization.js.map +0 -1
- package/dist/core/sync/qmd-sync.d.ts.map +0 -1
- package/dist/core/sync/qmd-sync.js.map +0 -1
- package/dist/core/temporal-facts.d.ts.map +0 -1
- package/dist/core/temporal-facts.js.map +0 -1
- package/dist/core/tracing/collector.d.ts.map +0 -1
- package/dist/core/tracing/collector.js.map +0 -1
- package/dist/core/tracing/visualizer.d.ts.map +0 -1
- package/dist/core/tracing/visualizer.js.map +0 -1
- package/dist/core/utils/cleanup-operations.d.ts.map +0 -1
- package/dist/core/utils/cleanup-operations.js.map +0 -1
- package/dist/core/utils/content-extraction.d.ts.map +0 -1
- package/dist/core/utils/content-extraction.js.map +0 -1
- package/dist/core/utils/filter-builder.d.ts.map +0 -1
- package/dist/core/utils/filter-builder.js.map +0 -1
- package/dist/core/utils/history-traversal.d.ts.map +0 -1
- package/dist/core/utils/history-traversal.js.map +0 -1
- package/dist/core/utils/memory-operations.d.ts.map +0 -1
- package/dist/core/utils/memory-operations.js.map +0 -1
- package/dist/core/utils/query-operations.d.ts.map +0 -1
- package/dist/core/utils/query-operations.js.map +0 -1
- package/dist/core/utils/summarization-helpers.d.ts.map +0 -1
- package/dist/core/utils/summarization-helpers.js.map +0 -1
- package/dist/core/utils/temporal-queries.d.ts.map +0 -1
- package/dist/core/utils/temporal-queries.js.map +0 -1
- package/dist/core/utils/version-management.d.ts.map +0 -1
- package/dist/core/utils/version-management.js.map +0 -1
- package/dist/core/utils.d.ts.map +0 -1
- package/dist/core/utils.js.map +0 -1
- package/dist/core/worker.d.ts.map +0 -1
- package/dist/core/worker.js.map +0 -1
- package/dist/db/adapter.d.ts.map +0 -1
- package/dist/db/adapter.js.map +0 -1
- package/dist/db/bootstrap.d.ts.map +0 -1
- package/dist/db/bootstrap.js.map +0 -1
- package/dist/db/index.d.ts.map +0 -1
- package/dist/db/index.js.map +0 -1
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.js.map +0 -1
- package/dist/drizzle/schema-sqlite.d.ts.map +0 -1
- package/dist/drizzle/schema-sqlite.js.map +0 -1
- package/dist/drizzle/schema.d.ts.map +0 -1
- package/dist/drizzle/schema.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts.map +0 -1
- package/packages/plugin-claude-code/dist/plugin-wrapper.js.map +0 -1
- package/packages/plugin-openclaw/dist/index.d.ts.map +0 -1
- package/packages/plugin-openclaw/dist/index.js.map +0 -1
package/dist/db/index.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { createDb } from './adapter.js';
|
|
2
2
|
import { config } from '../config.js';
|
|
3
|
-
export declare function getDb(): Promise<
|
|
3
|
+
export declare function getDb(): Promise<(import("drizzle-orm/node-postgres").NodePgDatabase<typeof import("../drizzle/schema.js")> & {
|
|
4
|
+
$client: import("pg").Pool;
|
|
5
|
+
}) | (import("drizzle-orm/better-sqlite3").BetterSQLite3Database<typeof import("../drizzle/schema-sqlite.js")> & {
|
|
6
|
+
$client: import("better-sqlite3").Database;
|
|
7
|
+
}) | import("drizzle-orm/sql-js").SQLJsDatabase<typeof import("../drizzle/schema-sqlite.js")>>;
|
|
4
8
|
export declare function checkDatabaseHealth(): Promise<boolean>;
|
|
5
9
|
export { config };
|
|
6
10
|
export { createDb };
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Squish v1.0.
|
|
3
|
+
* Squish v1.0.2 - Universal Memory Plugin System
|
|
4
4
|
*
|
|
5
5
|
* Modes:
|
|
6
6
|
* - CLI Mode: For any MCP client bash execution (e.g., `squish remember "text"`)
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import 'dotenv/config';
|
|
19
19
|
import fs from 'node:fs';
|
|
20
|
+
import { existsSync } from 'node:fs';
|
|
20
21
|
import os from 'node:os';
|
|
21
22
|
import path from 'node:path';
|
|
22
23
|
import { fileURLToPath } from 'node:url';
|
|
@@ -48,11 +49,12 @@ import { searchWithQMD, isQMDAvailable } from './core/search/qmd-search.js';
|
|
|
48
49
|
import { initializeCoreMemory, getCoreMemory, editCoreMemorySection, appendCoreMemorySection, getCoreMemoryStats, } from './core/core-memory.js';
|
|
49
50
|
import { loadMemoryToContext, evictMemoryFromContext, viewLoadedMemories, getContextStatus, } from './core/context-paging.js';
|
|
50
51
|
import { ensureDataDirectory } from './db/bootstrap.js';
|
|
52
|
+
import { getDataDir } from './config.js';
|
|
51
53
|
import { performAutoLoad, shouldAutoLoad, getAutoLoadConfig } from './core/session/auto-load.js';
|
|
52
54
|
import { initializeScheduler, registerJobHandler } from './core/scheduler/cron-scheduler.js';
|
|
53
55
|
import { startHeartbeatChecking, heartbeat } from './core/scheduler/heartbeat.js';
|
|
54
56
|
import { runNightlyJob, runWeeklyJob } from './core/scheduler/job-runner.js';
|
|
55
|
-
const VERSION = '1.0.
|
|
57
|
+
const VERSION = '1.0.2';
|
|
56
58
|
// Load plugin manifest for self-verification
|
|
57
59
|
function loadPluginManifest() {
|
|
58
60
|
try {
|
|
@@ -89,21 +91,197 @@ function verifyManifest(manifest) {
|
|
|
89
91
|
return { ok: errors.length === 0, errors };
|
|
90
92
|
}
|
|
91
93
|
// ============================================================================
|
|
92
|
-
//
|
|
94
|
+
// HELPER FUNCTIONS
|
|
93
95
|
// ============================================================================
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
96
|
+
function showHelp() {
|
|
97
|
+
console.log(`
|
|
98
|
+
Squish Memory v${VERSION} - Universal Memory Plugin System
|
|
99
|
+
|
|
100
|
+
Usage:
|
|
101
|
+
squish Start interactive wizard
|
|
102
|
+
squish run mcp Start MCP server
|
|
103
|
+
squish run web Start Web UI only
|
|
104
|
+
squish <command> [options] Run CLI commands for agents
|
|
105
|
+
|
|
106
|
+
CLI Commands (for agents):
|
|
107
|
+
squish remember <content> Store a memory
|
|
108
|
+
squish search <query> Search memories
|
|
109
|
+
squish health Check system health
|
|
110
|
+
squish stats View statistics
|
|
111
|
+
squish core_memory Manage core memory
|
|
112
|
+
|
|
113
|
+
Examples:
|
|
114
|
+
squish run mcp # Start MCP server (for Claude Code)
|
|
115
|
+
squish run web # Start Web UI only
|
|
116
|
+
squish remember "Hello" # Store memory via CLI
|
|
117
|
+
squish search "query" # Search memories via CLI
|
|
118
|
+
|
|
119
|
+
For more info: https://github.com/michielhdoteth/squish
|
|
120
|
+
`);
|
|
121
|
+
}
|
|
122
|
+
async function runInteractiveInstaller() {
|
|
123
|
+
const { select } = await import('@clack/prompts');
|
|
124
|
+
const { isCancel } = await import('@clack/prompts');
|
|
125
|
+
const { log } = await import('@clack/prompts');
|
|
126
|
+
const { intro, outro } = await import('@clack/prompts');
|
|
127
|
+
intro(`Squish Memory v${VERSION}`);
|
|
128
|
+
const options = [
|
|
129
|
+
{ value: 'mcp', label: 'Start MCP Server (for AI Assistants: Claude Code, OpenCode, etc.)' },
|
|
130
|
+
{ value: 'web', label: 'Start Web UI Only' },
|
|
131
|
+
{ value: 'health', label: 'Health & Stats' },
|
|
132
|
+
{ value: 'help', label: 'Show Help' },
|
|
133
|
+
{ value: 'exit', label: 'Exit' }
|
|
134
|
+
];
|
|
135
|
+
const selected = await select({
|
|
136
|
+
message: 'What would you like to do?',
|
|
137
|
+
options: options,
|
|
138
|
+
});
|
|
139
|
+
if (isCancel(selected)) {
|
|
140
|
+
outro('Cancelled');
|
|
141
|
+
process.exit(0);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
switch (selected) {
|
|
145
|
+
case 'mcp':
|
|
146
|
+
log.step('Starting MCP server...');
|
|
147
|
+
await runMcpMode();
|
|
148
|
+
break;
|
|
149
|
+
case 'web':
|
|
150
|
+
log.step('Starting Web UI...');
|
|
151
|
+
await runWebOnly();
|
|
152
|
+
break;
|
|
153
|
+
case 'health':
|
|
154
|
+
log.step('Checking health...');
|
|
155
|
+
await runCliCommand('health');
|
|
156
|
+
await runCliCommand('stats');
|
|
157
|
+
break;
|
|
158
|
+
case 'help':
|
|
159
|
+
showHelp();
|
|
160
|
+
process.exit(0);
|
|
161
|
+
break;
|
|
162
|
+
case 'exit':
|
|
163
|
+
outro('Goodbye! 👋');
|
|
164
|
+
process.exit(0);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async function runCliCommand(command) {
|
|
169
|
+
// Run CLI command programmatically
|
|
170
|
+
const program = new Command();
|
|
171
|
+
program.hook('preAction', async () => {
|
|
172
|
+
await ensureDataDirectory();
|
|
173
|
+
});
|
|
174
|
+
if (command === 'health') {
|
|
175
|
+
const dbHealth = await checkDatabaseHealth();
|
|
176
|
+
const redisHealth = await checkRedisHealth();
|
|
177
|
+
const dataDir = process.env.SQUISH_DATA_DIR || path.join(os.homedir(), '.squish');
|
|
178
|
+
const dirExists = fs.existsSync(dataDir);
|
|
179
|
+
console.log(`\n Squish Memory v${VERSION}`);
|
|
180
|
+
console.log(` ====================`);
|
|
181
|
+
console.log(` Mode: ${config.isTeamMode ? 'team' : 'local'}`);
|
|
182
|
+
console.log(` Database: ${dbHealth ? 'ok' : 'error'}`);
|
|
183
|
+
console.log(` Cache: ${redisHealth ? 'ok' : 'unavailable'}`);
|
|
184
|
+
console.log(` Data Dir: ${dataDir}`);
|
|
185
|
+
console.log(` Status: ${dbHealth ? 'HEALTHY' : 'UNHEALTHY'}\n`);
|
|
186
|
+
}
|
|
187
|
+
else if (command === 'stats') {
|
|
188
|
+
const stats = await getMemoryStats(process.cwd());
|
|
189
|
+
console.log(JSON.stringify({ ok: true, ...stats }, null, 2));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
async function spawnInstallerWizard() {
|
|
193
|
+
const distDir = path.dirname(fileURLToPath(import.meta.url));
|
|
194
|
+
const packageDir = path.dirname(distDir);
|
|
195
|
+
const installScript = path.join(packageDir, 'scripts', 'install-interactive.mjs');
|
|
196
|
+
if (!fs.existsSync(installScript)) {
|
|
197
|
+
console.error('Installer not found at:', installScript);
|
|
100
198
|
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
console.log('\nLaunching full installer wizard...\n');
|
|
201
|
+
const result = spawnSync('node', [`"${installScript}"`], {
|
|
202
|
+
stdio: 'inherit',
|
|
203
|
+
shell: true,
|
|
204
|
+
cwd: packageDir
|
|
101
205
|
});
|
|
206
|
+
process.exit(result.status || 0);
|
|
207
|
+
}
|
|
208
|
+
function isDatabaseInitialized() {
|
|
209
|
+
try {
|
|
210
|
+
const dataDir = getDataDir();
|
|
211
|
+
const dbPath = path.join(dataDir, 'squish.db');
|
|
212
|
+
return existsSync(dataDir) && existsSync(dbPath);
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
async function runWebOnly() {
|
|
219
|
+
console.log(`[squish] Starting Web UI only...`);
|
|
220
|
+
await ensureDataDirectory();
|
|
221
|
+
startWebServer();
|
|
222
|
+
}
|
|
223
|
+
// ============================================================================
|
|
224
|
+
// CLI MODE DETECTION
|
|
225
|
+
// ============================================================================
|
|
226
|
+
const args = process.argv.slice(2);
|
|
227
|
+
const firstArg = args[0];
|
|
228
|
+
// Detect command type
|
|
229
|
+
const isNoArgs = args.length === 0;
|
|
230
|
+
const isRunCommand = firstArg === 'run';
|
|
231
|
+
const isHelpCommand = firstArg === '--help' || firstArg === '-h' || firstArg === 'help';
|
|
232
|
+
if (isNoArgs) {
|
|
233
|
+
// Check if database exists - if not, run installer automatically
|
|
234
|
+
if (!isDatabaseInitialized()) {
|
|
235
|
+
console.log(`[squish] No existing database found. Launching installer wizard...\n`);
|
|
236
|
+
await spawnInstallerWizard();
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
// === INTERACTIVE WIZARD (default when no args) ===
|
|
240
|
+
runInteractiveInstaller().catch((e) => {
|
|
241
|
+
console.error('Installer error:', e.message);
|
|
242
|
+
process.exit(1);
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
else if (isRunCommand) {
|
|
247
|
+
// === RUN SUBCOMMAND ===
|
|
248
|
+
const subcommand = args[1];
|
|
249
|
+
if (subcommand === 'mcp') {
|
|
250
|
+
runMcpMode().catch((e) => {
|
|
251
|
+
logger.error('Fatal error', e);
|
|
252
|
+
process.exit(1);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
else if (subcommand === 'web') {
|
|
256
|
+
runWebOnly().catch((e) => {
|
|
257
|
+
logger.error('Web server error', e);
|
|
258
|
+
process.exit(1);
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
console.log(`
|
|
263
|
+
Usage: squish run <command>
|
|
264
|
+
|
|
265
|
+
Commands:
|
|
266
|
+
mcp Start MCP server
|
|
267
|
+
web Start Web UI only
|
|
268
|
+
|
|
269
|
+
Examples:
|
|
270
|
+
squish run mcp # Start MCP server with web UI
|
|
271
|
+
squish run web # Start Web UI only
|
|
272
|
+
`);
|
|
273
|
+
process.exit(subcommand ? 1 : 0);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else if (isHelpCommand) {
|
|
277
|
+
// === SHOW HELP ===
|
|
278
|
+
showHelp();
|
|
279
|
+
process.exit(0);
|
|
102
280
|
}
|
|
103
281
|
else {
|
|
104
|
-
// ===
|
|
105
|
-
|
|
106
|
-
|
|
282
|
+
// === CLI MODE (for agents/OpenClaw) ===
|
|
283
|
+
runCliMode().catch((e) => {
|
|
284
|
+
console.error(JSON.stringify({ error: e.message }, null, 2));
|
|
107
285
|
process.exit(1);
|
|
108
286
|
});
|
|
109
287
|
}
|
|
@@ -365,7 +543,7 @@ async function runCliMode() {
|
|
|
365
543
|
// squish stats
|
|
366
544
|
program
|
|
367
545
|
.command('stats')
|
|
368
|
-
.description('
|
|
546
|
+
.description('View statistics')
|
|
369
547
|
.option('-p, --project <project>', 'Project path', process.cwd())
|
|
370
548
|
.action(async (options) => {
|
|
371
549
|
try {
|
|
@@ -377,44 +555,12 @@ async function runCliMode() {
|
|
|
377
555
|
process.exit(1);
|
|
378
556
|
}
|
|
379
557
|
});
|
|
380
|
-
// squish install
|
|
558
|
+
// squish install
|
|
381
559
|
program
|
|
382
560
|
.command('install')
|
|
383
|
-
.description('
|
|
384
|
-
.
|
|
385
|
-
|
|
386
|
-
.option('--skip-install', 'Skip global npm install step', false)
|
|
387
|
-
.action(async (options) => {
|
|
388
|
-
// Find the install script - it's in scripts/ relative to the package root
|
|
389
|
-
// When running from dist/index.js, scripts is at ../scripts/
|
|
390
|
-
const distDir = path.dirname(fileURLToPath(import.meta.url));
|
|
391
|
-
const packageDir = path.dirname(distDir);
|
|
392
|
-
const installScript = path.join(packageDir, 'scripts', 'install.mjs');
|
|
393
|
-
// Check if the script exists
|
|
394
|
-
if (!fs.existsSync(installScript)) {
|
|
395
|
-
console.log(JSON.stringify({
|
|
396
|
-
ok: false,
|
|
397
|
-
error: `Install script not found at: ${installScript}`,
|
|
398
|
-
hint: 'Please ensure squish-memory is installed correctly'
|
|
399
|
-
}, null, 2));
|
|
400
|
-
process.exit(1);
|
|
401
|
-
}
|
|
402
|
-
// Build command with quoted path for Windows compatibility
|
|
403
|
-
const args = [`"${installScript}"`];
|
|
404
|
-
if (options.dryRun)
|
|
405
|
-
args.push('--dry-run');
|
|
406
|
-
if (options.openclawDir)
|
|
407
|
-
args.push('--openclaw-dir', `"${options.openclawDir}"`);
|
|
408
|
-
if (options.skipInstall)
|
|
409
|
-
args.push('--skip-install');
|
|
410
|
-
const result = spawnSync('node', args, {
|
|
411
|
-
stdio: 'inherit',
|
|
412
|
-
shell: true,
|
|
413
|
-
cwd: packageDir
|
|
414
|
-
});
|
|
415
|
-
if (result.status !== 0) {
|
|
416
|
-
process.exit(result.status || 1);
|
|
417
|
-
}
|
|
561
|
+
.description('Run the interactive installer wizard')
|
|
562
|
+
.action(async () => {
|
|
563
|
+
await spawnInstallerWizard();
|
|
418
564
|
});
|
|
419
565
|
await program.parseAsync(process.argv);
|
|
420
566
|
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
{
|
|
2
|
-
"mode": "universal",
|
|
3
|
-
"generatedAt": "2026-03-
|
|
4
|
-
"source": "config/mcp.json",
|
|
5
|
-
"files": [
|
|
6
|
-
{
|
|
7
|
-
"file": "mcp-servers.json",
|
|
8
|
-
"sha256": "2c90cc52893f55bc92cc4f29c77bfeeb635c1c73fa46038d287548caeb35ca6a"
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"file": "mcporter.json",
|
|
12
|
-
"sha256": "af42e1c03d44f66fcbe2a9b7694f1d3a126527147c66b760236e72348e1e4573"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"file": "openclaw-memory-qmd.json",
|
|
16
|
-
"sha256": "8a158ff45e98e0db7a7aff41dba7be76652b72aea82443773f9efc7fb056d615"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"file": "runtime.json",
|
|
20
|
-
"sha256": "4afbdec03de92c6a29fc24df32f01305c2e9cf69ed2d02866a01e361492d14b6"
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"mode": "universal",
|
|
3
|
+
"generatedAt": "2026-03-18T18:13:29.152Z",
|
|
4
|
+
"source": "config/mcp.json",
|
|
5
|
+
"files": [
|
|
6
|
+
{
|
|
7
|
+
"file": "mcp-servers.json",
|
|
8
|
+
"sha256": "2c90cc52893f55bc92cc4f29c77bfeeb635c1c73fa46038d287548caeb35ca6a"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"file": "mcporter.json",
|
|
12
|
+
"sha256": "af42e1c03d44f66fcbe2a9b7694f1d3a126527147c66b760236e72348e1e4573"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"file": "openclaw-memory-qmd.json",
|
|
16
|
+
"sha256": "8a158ff45e98e0db7a7aff41dba7be76652b72aea82443773f9efc7fb056d615"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"file": "runtime.json",
|
|
20
|
+
"sha256": "4afbdec03de92c6a29fc24df32f01305c2e9cf69ed2d02866a01e361492d14b6"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "squish-memory",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "Two-tier memory for AI agents: QMD-based fast file search (short-term) + SQLite/Postgres (long-term). Works out-of-the-box, no setup required.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
8
|
"squish": "dist/index.js",
|
|
9
9
|
"squish-mcp": "dist/commands/mcp-server.js",
|
|
10
|
+
"squish-add": "bin/squish-add.mjs",
|
|
11
|
+
"squish-rm": "bin/squish-rm.mjs",
|
|
10
12
|
"squish-install": "npx-installer.js",
|
|
11
13
|
"squish-install-plugin": "scripts/install-plugin.mjs"
|
|
12
14
|
},
|
|
@@ -15,14 +17,12 @@
|
|
|
15
17
|
"build:plugins": "npm run build && npm run build:claude && npm run build:openclaw",
|
|
16
18
|
"build:claude": "cp -r .claude-plugin packages/plugin-claude-code/",
|
|
17
19
|
"build:openclaw": "mkdir -p packages/plugin-openclaw/dist && cp -r plugins/openclaw/* packages/plugin-openclaw/ && (cd packages/plugin-openclaw && npm run build 2>/dev/null || true)",
|
|
18
|
-
"build:mcp": "tsc commands/mcp-server.ts --outDir dist/commands --module ES2022 --moduleResolution node --esModuleInterop --target ES2022 --skipLibCheck",
|
|
19
|
-
"mcp:cjs": "esbuild commands/mcp-server.ts --bundle --platform=node --outfile=dist/commands/mcp-server.cjs --format=cjs --external:better-sqlite3 --external:pg --external:drizzle-orm/*",
|
|
20
20
|
"start": "node dist/index.js",
|
|
21
|
-
"mcp": "node dist/commands/mcp-server.
|
|
21
|
+
"mcp": "node dist/commands/mcp-server.js",
|
|
22
22
|
"web": "node dist/api/web/web-server.js",
|
|
23
23
|
"web:bun": "bun run dist/api/web/web-server.js",
|
|
24
|
-
"dev": "bun --hot
|
|
25
|
-
"dev:mcp": "bun --hot
|
|
24
|
+
"dev": "bun --hot index.ts",
|
|
25
|
+
"dev:mcp": "bun --hot commands/mcp-server.ts",
|
|
26
26
|
"verify:mcp": "node scripts/verify-mcp.mjs",
|
|
27
27
|
"preflight:remote": "node scripts/remote-preflight.mjs",
|
|
28
28
|
"fallback:dry": "node scripts/squish-fallback.mjs --op health --simulate-mcp-failure --dry-run",
|
|
@@ -75,8 +75,6 @@
|
|
|
75
75
|
"vscode",
|
|
76
76
|
"plugin",
|
|
77
77
|
"plugin-architecture",
|
|
78
|
-
"openclaw-plugin",
|
|
79
|
-
"claude-code-plugin",
|
|
80
78
|
"qmd",
|
|
81
79
|
"sqlite",
|
|
82
80
|
"postgres",
|
|
@@ -86,83 +84,98 @@
|
|
|
86
84
|
"local-first",
|
|
87
85
|
"privacy",
|
|
88
86
|
"agent-framework",
|
|
89
|
-
"agent-memory"
|
|
87
|
+
"agent-memory",
|
|
88
|
+
"ai-memory",
|
|
89
|
+
"agentic",
|
|
90
|
+
"context-window",
|
|
91
|
+
"long-term-memory",
|
|
92
|
+
"rag",
|
|
93
|
+
"vector-embeddings",
|
|
94
|
+
"session-persistence"
|
|
90
95
|
],
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
96
|
+
"files": [
|
|
97
|
+
"dist/**/*.js",
|
|
98
|
+
"dist/**/*.d.ts",
|
|
99
|
+
"dist/**/*.cjs",
|
|
100
|
+
"scripts",
|
|
101
|
+
"!scripts/init-dirs.ts",
|
|
102
|
+
"skills",
|
|
103
|
+
"hooks",
|
|
104
|
+
"config",
|
|
105
|
+
"bin",
|
|
106
|
+
"generated",
|
|
107
|
+
"packages/plugin-claude-code/dist/*.js",
|
|
108
|
+
"packages/plugin-claude-code/dist/*.d.ts",
|
|
109
|
+
"packages/plugin-claude-code/package.json",
|
|
110
|
+
"packages/plugin-claude-code/README.md",
|
|
111
|
+
"packages/plugin-openclaw/dist/*.js",
|
|
112
|
+
"packages/plugin-openclaw/dist/*.d.ts",
|
|
113
|
+
"packages/plugin-openclaw/package.json",
|
|
114
|
+
"packages/plugin-openclaw/README.md",
|
|
115
|
+
"packages/plugin-openclaw/openclaw.plugin.json",
|
|
116
|
+
"packages/plugin-opencode/package.json",
|
|
117
|
+
"packages/plugin-opencode/install.mjs",
|
|
118
|
+
"plugin.json",
|
|
119
|
+
".claude-plugin",
|
|
120
|
+
".mcp.json",
|
|
121
|
+
".env.mcp.example",
|
|
122
|
+
"LICENSE",
|
|
123
|
+
"README.md",
|
|
124
|
+
"CHANGELOG.md",
|
|
125
|
+
"QUICK-START.md",
|
|
126
|
+
"commands/context-paging.md",
|
|
127
|
+
"commands/context-status.md",
|
|
128
|
+
"commands/context.md",
|
|
129
|
+
"commands/core-memory.md",
|
|
130
|
+
"commands/health.md",
|
|
131
|
+
"commands/init.md",
|
|
132
|
+
"commands/merge.md",
|
|
133
|
+
"commands/observe.md",
|
|
134
|
+
"commands/recall.md",
|
|
135
|
+
"commands/remember.md",
|
|
136
|
+
"commands/search.md"
|
|
137
|
+
],
|
|
138
|
+
"author": "michielhdoteth <michiel@4mlabs.io>",
|
|
130
139
|
"license": "MIT",
|
|
131
140
|
"engines": {
|
|
132
141
|
"node": ">=18.0.0"
|
|
133
142
|
},
|
|
134
143
|
"dependencies": {
|
|
135
|
-
"@
|
|
144
|
+
"@clack/prompts": "^0.7.0",
|
|
145
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
136
146
|
"better-sqlite3": "12.6.2",
|
|
137
147
|
"bull": "^4.16.0",
|
|
138
148
|
"commander": "^12.0.0",
|
|
139
149
|
"cors": "2.8.6",
|
|
140
150
|
"dotenv": "^16.4.0",
|
|
141
151
|
"drizzle-orm": "^0.38.0",
|
|
142
|
-
"express": "^
|
|
143
|
-
"
|
|
152
|
+
"express": "^5.2.1",
|
|
153
|
+
"express-rate-limit": "^8.3.1",
|
|
154
|
+
"hono": "^4.12.8",
|
|
155
|
+
"node-cron": "^3.0.0",
|
|
156
|
+
"pg": "^8.20.0",
|
|
144
157
|
"pgvector": "^0.2.0",
|
|
145
|
-
"
|
|
158
|
+
"picocolors": "^1.0.0",
|
|
159
|
+
"redis": "^5.11.0",
|
|
160
|
+
"sql.js": "^1.14.1",
|
|
146
161
|
"tree-sitter": "^0.22.0",
|
|
147
162
|
"tree-sitter-javascript": "^0.23.0",
|
|
148
163
|
"tree-sitter-python": "^0.23.0",
|
|
149
164
|
"tree-sitter-typescript": "^0.23.0",
|
|
150
|
-
"uuid": "^
|
|
165
|
+
"uuid": "^13.0.0",
|
|
151
166
|
"ws": "^8.18.0",
|
|
152
|
-
"zod": "^3.24.0"
|
|
153
|
-
"node-cron": "^3.0.0"
|
|
167
|
+
"zod": "^3.24.0"
|
|
154
168
|
},
|
|
155
169
|
"devDependencies": {
|
|
156
170
|
"@types/better-sqlite3": "^7.6.13",
|
|
157
171
|
"@types/cors": "^2.8.17",
|
|
158
172
|
"@types/express": "^5.0.0",
|
|
159
173
|
"@types/node": "^22.0.0",
|
|
160
|
-
"@types/pg": "^8.11.10",
|
|
161
174
|
"@types/node-cron": "^3.0.11",
|
|
175
|
+
"@types/pg": "^8.11.10",
|
|
162
176
|
"@types/ws": "^8.5.13",
|
|
163
177
|
"drizzle-kit": "^0.30.0",
|
|
164
178
|
"pkg": "^5.8.1",
|
|
165
|
-
"typescript": "^5.7.0"
|
|
166
|
-
"vitest": "^4.0.17"
|
|
179
|
+
"typescript": "^5.7.0"
|
|
167
180
|
}
|
|
168
181
|
}
|
|
@@ -116,7 +116,8 @@ function parseArgs(argv) {
|
|
|
116
116
|
dryRun: false,
|
|
117
117
|
help: false,
|
|
118
118
|
verbose: false,
|
|
119
|
-
quick: false
|
|
119
|
+
quick: false,
|
|
120
|
+
interactive: false
|
|
120
121
|
};
|
|
121
122
|
|
|
122
123
|
for (let i = 2; i < argv.length; i++) {
|
|
@@ -136,6 +137,8 @@ function parseArgs(argv) {
|
|
|
136
137
|
flags.help = true;
|
|
137
138
|
} else if (token === "--quick" || token === "-q") {
|
|
138
139
|
flags.quick = true;
|
|
140
|
+
} else if (token === "--interactive" || token === "-i") {
|
|
141
|
+
flags.interactive = true;
|
|
139
142
|
} else if (token.startsWith("--select=")) {
|
|
140
143
|
flags.select = token.slice(9).split(",").map(s => s.trim());
|
|
141
144
|
} else if (token === "--select") {
|
|
@@ -647,13 +650,13 @@ async function main() {
|
|
|
647
650
|
verbose: flags.verbose
|
|
648
651
|
};
|
|
649
652
|
|
|
650
|
-
// Non-interactive mode
|
|
651
|
-
if (flags.auto || flags.quick || flags.select.length > 0 || shouldUseNonInteractive()) {
|
|
653
|
+
// Non-interactive mode (only if explicitly requested and not in interactive mode)
|
|
654
|
+
if (!flags.interactive && (flags.auto || flags.quick || flags.select.length > 0 || shouldUseNonInteractive())) {
|
|
652
655
|
await handleNonInteractive(flags, options);
|
|
653
656
|
return;
|
|
654
657
|
}
|
|
655
658
|
|
|
656
|
-
// Interactive wizard mode
|
|
659
|
+
// Interactive wizard mode (default when no flags, or when --interactive is passed)
|
|
657
660
|
await runWizard(options);
|
|
658
661
|
}
|
|
659
662
|
|