@a-company/paradigm 3.28.0 → 3.34.0
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/dist/{accept-orchestration-6EM5EHXA.js → accept-orchestration-XXANWJVZ.js} +3 -3
- package/dist/{aggregate-M5WMUI6B.js → aggregate-XHQ6GI3Z.js} +2 -2
- package/dist/{beacon-XL2ALH5O.js → beacon-BTLQMYQL.js} +2 -2
- package/dist/{chunk-AK5M6KJB.js → chunk-36TKPM5Z.js} +20 -2
- package/dist/{chunk-ZOH24ZPF.js → chunk-3BGSDKWD.js} +3 -3
- package/dist/{chunk-6P4IFIK2.js → chunk-CTF6RHKG.js} +37 -3
- package/dist/{chunk-SCC77UUP.js → chunk-H4TVBJD4.js} +3 -3
- package/dist/{chunk-KWDTBXP2.js → chunk-LHLIAYQ3.js} +1 -1
- package/dist/{chunk-7IJ5JVKT.js → chunk-PFLWLC6J.js} +59 -7
- package/dist/{chunk-W4VFKZVF.js → chunk-S5TDFT5Q.js} +2 -2
- package/dist/{chunk-N6RNYCZD.js → chunk-UQNTJ5VB.js} +1 -1
- package/dist/{chunk-MRENOFTR.js → chunk-VUSCJJ4A.js} +6 -1
- package/dist/{chunk-OXG5GVDJ.js → chunk-WOONGZ3C.js} +1 -1
- package/dist/{commands-6ZVTD74M.js → commands-KPT2T2OZ.js} +1 -1
- package/dist/{constellation-NXU6Q2HM.js → constellation-LZ6XIKDT.js} +2 -2
- package/dist/{cost-CTGSLSOC.js → cost-4SZM7OUS.js} +1 -1
- package/dist/{cursorrules-XBWFX66V.js → cursorrules-3TKZ4E4R.js} +2 -2
- package/dist/{diff-AH7L4PRQ.js → diff-T6YJSAAC.js} +3 -3
- package/dist/{dist-KY5HGDDL.js → dist-OH4DBV2O.js} +42 -3
- package/dist/{dist-7U64HDSC.js → dist-QSBAGCZT.js} +8 -2
- package/dist/index.js +43 -39
- package/dist/{lint-53GPXKKI.js → lint-MTRZB5EC.js} +1 -1
- package/dist/mcp.js +42 -7
- package/dist/migrate-HRN5TUBQ.js +871 -0
- package/dist/{orchestrate-HMSQ2CED.js → orchestrate-3SI6ON33.js} +3 -3
- package/dist/{probe-SN4BNXOC.js → probe-ABMGCXQG.js} +4 -4
- package/dist/{reindex-YG3KIXAK.js → reindex-YC7LD4MN.js} +1 -1
- package/dist/{remember-IEBQHXHZ.js → remember-WR6ZVXLT.js} +1 -1
- package/dist/{ripple-DFMXLFWI.js → ripple-QTXKJCEI.js} +2 -2
- package/dist/sentinel.js +6 -6
- package/dist/{setup-HOI52TN3.js → setup-ASR6OMKV.js} +4 -4
- package/dist/{shift-DRF5M3G6.js → shift-7XLSBLDW.js} +19 -9
- package/dist/{snapshot-XHINQBZS.js → snapshot-QZFD7YBI.js} +2 -2
- package/dist/{summary-NV7SBV5O.js → summary-R4CSYNNP.js} +2 -2
- package/dist/{team-YOGT2Q2X.js → team-VH3HYABB.js} +4 -4
- package/dist/university-content/courses/para-101.json +53 -0
- package/dist/university-content/plsat/v3.0.json +78 -1
- package/dist/{upgrade-65QOQXRC.js → upgrade-ANX3LVSA.js} +1 -0
- package/dist/{validate-TKKRGJKC.js → validate-OUHUBZPO.js} +1 -1
- package/dist/{workspace-L27RR5MF.js → workspace-5RBSALXC.js} +5 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
initCommand
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-H4TVBJD4.js";
|
|
5
|
+
import "./chunk-S5TDFT5Q.js";
|
|
6
|
+
import "./chunk-36TKPM5Z.js";
|
|
7
7
|
import {
|
|
8
8
|
aggregateFromDirectory,
|
|
9
9
|
buildSymbolIndex,
|
|
10
10
|
getSymbolCounts
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-CTF6RHKG.js";
|
|
12
12
|
import {
|
|
13
13
|
findPurposeFiles
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-VUSCJJ4A.js";
|
|
15
15
|
import {
|
|
16
16
|
findGateFiles
|
|
17
17
|
} from "./chunk-IRKUEJVW.js";
|
|
@@ -111,7 +111,7 @@ ${chalk2.magenta("\u2569 ")}${chalk2.cyan("\u2534 \u2534\u2534\u2514\u2500\u253
|
|
|
111
111
|
program.name("paradigm").description("Unified developer tools ecosystem").version(VERSION).addHelpText("before", banner);
|
|
112
112
|
program.command("init").description("Initialize Paradigm in the current project").option("-f, --force", "Overwrite existing files").option("--name <name>", "Project name").option("--ide <ide>", "Target IDE: cursor, copilot, windsurf, claude").option("--stack <stack>", "Stack preset (e.g., nextjs, fastapi, swift-ios). Auto-detected if omitted.").option("--migrate", "Output migration prompt for existing IDE files").option("--quick", "Non-interactive mode with smart defaults").option("--dry-run", "Show what would be created without creating").action(initCommand);
|
|
113
113
|
program.command("shift").description("Full project setup in one command (init + team init + scan + sync all IDEs + doctor)").option("-f, --force", "Reinitialize even if already setup").option("-q, --quick", "Skip slow operations (scan)").option("--verify", "Run health checks after setup").option("--ide <ide>", "Target specific IDE instead of all").option("--configure-models", "Force model configuration prompts for team agents").option("--stack <stack>", "Stack preset (e.g., nextjs, fastapi, swift-ios). Auto-detected if omitted.").option("--workspace <name>", "Create or join a multi-project workspace with this name (creates ../.paradigm-workspace)").option("--workspace-path <path>", "Custom workspace file location (default: ../.paradigm-workspace)").action(async (options) => {
|
|
114
|
-
const { shiftCommand } = await import("./shift-
|
|
114
|
+
const { shiftCommand } = await import("./shift-7XLSBLDW.js");
|
|
115
115
|
await shiftCommand(options);
|
|
116
116
|
});
|
|
117
117
|
program.command("presets").description("List available stack presets for paradigm init/shift").option("-d, --discipline <discipline>", "Filter by discipline (e.g., fullstack, api, mobile)").action(async (options) => {
|
|
@@ -143,17 +143,17 @@ program.command("presets").description("List available stack presets for paradig
|
|
|
143
143
|
`));
|
|
144
144
|
});
|
|
145
145
|
program.command("setup [path]").description("Interactive setup wizard for Paradigm").option("-y, --yes", "Accept all defaults (non-interactive)").option("-f, --force", "Overwrite existing .paradigm config").action(async (path2, options) => {
|
|
146
|
-
const { setupCommand } = await import("./setup-
|
|
146
|
+
const { setupCommand } = await import("./setup-ASR6OMKV.js");
|
|
147
147
|
await setupCommand(path2, options);
|
|
148
148
|
});
|
|
149
149
|
program.command("status").alias("st").description("Show project status and symbol counts").action(statusCommand);
|
|
150
150
|
var purposeCmd = program.command("purpose").description("Purpose-related commands");
|
|
151
151
|
purposeCmd.command("remember [path]").description("Aggregate and display purpose context").action(async (path2 = ".") => {
|
|
152
|
-
const { purposeRememberCommand } = await import("./remember-
|
|
152
|
+
const { purposeRememberCommand } = await import("./remember-WR6ZVXLT.js");
|
|
153
153
|
await purposeRememberCommand(path2);
|
|
154
154
|
});
|
|
155
155
|
purposeCmd.command("validate [path]").description("Validate purpose files").action(async (path2 = ".") => {
|
|
156
|
-
const { purposeValidateCommand } = await import("./validate-
|
|
156
|
+
const { purposeValidateCommand } = await import("./validate-OUHUBZPO.js");
|
|
157
157
|
await purposeValidateCommand(path2);
|
|
158
158
|
});
|
|
159
159
|
var portalCmd = program.command("portal").description("Portal-related commands");
|
|
@@ -183,11 +183,11 @@ portalCmd.command("export [path]").description("Export portal configuration in j
|
|
|
183
183
|
});
|
|
184
184
|
var premiseCmd = program.command("premise").description("Premise-related commands");
|
|
185
185
|
premiseCmd.command("aggregate [path]").description("Aggregate all sources into symbol index").action(async (path2 = ".") => {
|
|
186
|
-
const { premiseAggregateCommand } = await import("./aggregate-
|
|
186
|
+
const { premiseAggregateCommand } = await import("./aggregate-XHQ6GI3Z.js");
|
|
187
187
|
await premiseAggregateCommand(path2);
|
|
188
188
|
});
|
|
189
189
|
premiseCmd.command("snapshot <name>").description("Create a timeline snapshot").option("-d, --description <desc>", "Snapshot description").action(async (name, options) => {
|
|
190
|
-
const { premiseSnapshotCommand } = await import("./snapshot-
|
|
190
|
+
const { premiseSnapshotCommand } = await import("./snapshot-QZFD7YBI.js");
|
|
191
191
|
await premiseSnapshotCommand(name, options.description);
|
|
192
192
|
});
|
|
193
193
|
program.command("sync [ide]").description("Generate IDE instruction files from .paradigm/ config").option("--all", "Sync all supported IDEs").option("-f, --force", "Overwrite existing files").option("--mcp", "Generate MCP configuration (default: true)").option("--no-mcp", "Skip MCP configuration generation").option("--nested", "Generate nested CLAUDE.md files for directories with .purpose").action(async (ide, options) => {
|
|
@@ -200,28 +200,32 @@ program.command("sync-llms").description("Generate llms.txt \u2014 LLM-readable
|
|
|
200
200
|
});
|
|
201
201
|
program.command("cursorrules [path]").description("[DEPRECATED] Use `paradigm sync cursor` instead").option("-a, --append", "Append to existing .cursorrules").option("-f, --force", "Overwrite existing .cursorrules").option("-p, --preview", "Preview output without writing").option("--init", "Create default .paradigm config if missing").option("--with-scan", "Include probe protocol section").action(async (path2, options) => {
|
|
202
202
|
console.log("\x1B[33m\u26A0\uFE0F `paradigm cursorrules` is deprecated. Use `paradigm sync cursor` instead.\x1B[0m\n");
|
|
203
|
-
const { cursorrrulesCommand } = await import("./cursorrules-
|
|
203
|
+
const { cursorrrulesCommand } = await import("./cursorrules-3TKZ4E4R.js");
|
|
204
204
|
await cursorrrulesCommand(path2, options);
|
|
205
205
|
});
|
|
206
206
|
program.command("index [path]").description("Generate probe index for visual discovery").option("-o, --output <path>", "Output path for probe-index.json").option("-q, --quiet", "Suppress output").action(async (path2, options) => {
|
|
207
|
-
const { indexCommand } = await import("./probe-
|
|
207
|
+
const { indexCommand } = await import("./probe-ABMGCXQG.js");
|
|
208
208
|
await indexCommand(path2, options);
|
|
209
209
|
});
|
|
210
210
|
var probeCmd = program.command("probe").description("Probe-related commands");
|
|
211
211
|
probeCmd.command("index [path]").description("Generate probe index (alias for `paradigm index`)").option("-o, --output <path>", "Output path for probe-index.json").option("-q, --quiet", "Suppress output").action(async (path2, options) => {
|
|
212
|
-
const { indexCommand } = await import("./probe-
|
|
212
|
+
const { indexCommand } = await import("./probe-ABMGCXQG.js");
|
|
213
213
|
await indexCommand(path2, options);
|
|
214
214
|
});
|
|
215
|
-
program.command("
|
|
216
|
-
const {
|
|
215
|
+
program.command("migrate").description("Detect and apply migrations to bring project up to date").option("--dry-run", "Preview changes without applying").option("--apply", "Apply all auto migrations without prompting").option("-f, --force", "Re-run previously applied migrations").option("--only <ids...>", "Run specific migrations by ID").option("--category <cat>", "Run migrations in a category (directory, config, template, hook)").option("--no-sync", "Skip template sync").option("--list", "List all migrations and their status").option("-v, --verbose", "Show detailed output").action(async (options) => {
|
|
216
|
+
const { migrateCommand } = await import("./migrate-HRN5TUBQ.js");
|
|
217
|
+
await migrateCommand(options);
|
|
218
|
+
});
|
|
219
|
+
program.command("upgrade [path]").description("(Deprecated) Upgrade project with new Paradigm features \u2014 use `paradigm migrate`").option("--features <features...>", "Features to upgrade (probe, logger)").option("--all", "Apply all available upgrades").option("--from-horizon", "Migrate from Horizon to Paradigm").option("--dry-run", "Show what would be upgraded without making changes").option("-f, --force", "Force re-upgrade even if already configured").action(async (path2, options) => {
|
|
220
|
+
const { upgradeCommand } = await import("./upgrade-ANX3LVSA.js");
|
|
217
221
|
await upgradeCommand(path2, options);
|
|
218
222
|
});
|
|
219
223
|
program.command("lint [path]").description("Validate .purpose files for schema errors").option("-f, --fix", "Auto-fix issues where possible").option("-s, --strict", "Fail on warnings (not just errors)").option("-q, --quiet", "Suppress output except errors").option("--json", "Output as JSON").option("--auto-populate", "Scan for undocumented source dirs and suggest .purpose entries (use with --fix to write)").action(async (path2, options) => {
|
|
220
|
-
const { lintCommand } = await import("./lint-
|
|
224
|
+
const { lintCommand } = await import("./lint-MTRZB5EC.js");
|
|
221
225
|
await lintCommand(path2, options);
|
|
222
226
|
});
|
|
223
227
|
program.command("cost [path]").description("Analyze token costs for AI context").option("-d, --detailed", "Show detailed breakdown by file").option("--json", "Output as JSON").action(async (path2, options) => {
|
|
224
|
-
const { costCommand } = await import("./cost-
|
|
228
|
+
const { costCommand } = await import("./cost-4SZM7OUS.js");
|
|
225
229
|
await costCommand(path2, options);
|
|
226
230
|
});
|
|
227
231
|
var scanCmd = program.command("scan").description("Visual discovery and auto-generation commands");
|
|
@@ -245,7 +249,7 @@ flowCmd.action(() => {
|
|
|
245
249
|
});
|
|
246
250
|
var teamCmd = program.command("team").description("Multi-agent orchestration commands");
|
|
247
251
|
teamCmd.command("init [path]").description("Initialize team configuration with default agents").option("-f, --force", "Overwrite existing configuration").option("--configure-models", "Force model configuration prompts").option("--no-configure-models", "Skip model configuration").option("--json", "Output as JSON").action(async (path2, options) => {
|
|
248
|
-
const { teamInitCommand } = await import("./team-
|
|
252
|
+
const { teamInitCommand } = await import("./team-VH3HYABB.js");
|
|
249
253
|
await teamInitCommand(path2, {
|
|
250
254
|
...options,
|
|
251
255
|
configureModels: options.configureModels,
|
|
@@ -253,27 +257,27 @@ teamCmd.command("init [path]").description("Initialize team configuration with d
|
|
|
253
257
|
});
|
|
254
258
|
});
|
|
255
259
|
teamCmd.command("status [path]").description("Show current team status").option("--running", "Show only running orchestrations").option("--id <id>", "Show specific orchestration").option("--json", "Output as JSON").action(async (path2, options) => {
|
|
256
|
-
const { teamStatusCommand } = await import("./team-
|
|
260
|
+
const { teamStatusCommand } = await import("./team-VH3HYABB.js");
|
|
257
261
|
await teamStatusCommand(path2, options);
|
|
258
262
|
});
|
|
259
263
|
teamCmd.command("handoff [path]").description("Hand off current task to another agent").requiredOption("-t, --to <agent>", "Target agent name").option("-s, --summary <text>", "Summary of what was done").option("--json", "Output as JSON").action(async (path2, options) => {
|
|
260
|
-
const { teamHandoffCommand } = await import("./team-
|
|
264
|
+
const { teamHandoffCommand } = await import("./team-VH3HYABB.js");
|
|
261
265
|
await teamHandoffCommand(path2, options);
|
|
262
266
|
});
|
|
263
267
|
teamCmd.command("accept [handoff-id] [path]").description("Accept a pending handoff").option("-n, --note <text>", "Acceptance note").option("--json", "Output as JSON").action(async (handoffId, path2, options) => {
|
|
264
|
-
const { teamAcceptCommand } = await import("./team-
|
|
268
|
+
const { teamAcceptCommand } = await import("./team-VH3HYABB.js");
|
|
265
269
|
await teamAcceptCommand(handoffId, path2, options);
|
|
266
270
|
});
|
|
267
271
|
teamCmd.command("check [path]").description("Check for conflicts and team health issues").option("--json", "Output as JSON").action(async (path2, options) => {
|
|
268
|
-
const { teamCheckCommand } = await import("./team-
|
|
272
|
+
const { teamCheckCommand } = await import("./team-VH3HYABB.js");
|
|
269
273
|
await teamCheckCommand(path2, options);
|
|
270
274
|
});
|
|
271
275
|
teamCmd.command("history [path]").description("Show full activity log").option("-l, --limit <number>", "Number of entries to show", "50").option("--json", "Output as JSON").action(async (path2, options) => {
|
|
272
|
-
const { teamHistoryCommand } = await import("./team-
|
|
276
|
+
const { teamHistoryCommand } = await import("./team-VH3HYABB.js");
|
|
273
277
|
await teamHistoryCommand(path2, { ...options, limit: parseInt(options.limit) });
|
|
274
278
|
});
|
|
275
279
|
teamCmd.command("reset [path]").description("Reset team state for fresh start").option("-f, --force", "Force reset even with pending work").option("--json", "Output as JSON").action(async (path2, options) => {
|
|
276
|
-
const { teamResetCommand } = await import("./team-
|
|
280
|
+
const { teamResetCommand } = await import("./team-VH3HYABB.js");
|
|
277
281
|
await teamResetCommand(path2, options);
|
|
278
282
|
});
|
|
279
283
|
teamCmd.command("spawn <agent> [path]").description("Spawn an AI agent to work on a task").requiredOption("-t, --task <task>", "Task for the agent to perform").option("-m, --model <model>", "Model to use: opus, sonnet, haiku").option("-p, --provider <provider>", "Provider: auto, claude, claude-code, claude-cli, manual").option("--budget <budget>", 'Budget limits (e.g., "tokens=100000,cost=2")').option("--timeout <ms>", "Timeout in milliseconds").option("--checkpoint", "Pause for approval before writes/deletes").option("-q, --quiet", "Suppress output").option("--json", "Output as JSON").action(async (agent, path2, options) => {
|
|
@@ -281,19 +285,19 @@ teamCmd.command("spawn <agent> [path]").description("Spawn an AI agent to work o
|
|
|
281
285
|
await teamSpawnCommand(agent, path2, options);
|
|
282
286
|
});
|
|
283
287
|
teamCmd.command("orchestrate <task> [path]").description("Orchestrate a multi-agent task").option("--solo", "Run in solo mode (single Claude)").option("--faceted", "Run in faceted mode (multi-agent, default)").option("--compare", "Run both modes and compare results").option("--background", "Run in background mode (returns immediately)").option("--notify <methods>", "Notification methods: bell,desktop,file,webhook (default: bell)").option("-m, --model <model>", "Orchestrator model: opus, sonnet, haiku").option("-p, --provider <provider>", "Provider: auto, claude, claude-code, claude-cli, manual").option("--budget <budget>", 'Budget limits (e.g., "tokens=500000,cost=5")').option("--checkpoint", "Pause for approval between agents").option("--live", "Stream agent output live").option("--pm", "Enable PM governance (compliance checks before/after)").option("-q, --quiet", "Suppress output").option("--json", "Output as JSON").action(async (task, path2, options) => {
|
|
284
|
-
const { teamOrchestrateCommand } = await import("./orchestrate-
|
|
288
|
+
const { teamOrchestrateCommand } = await import("./orchestrate-3SI6ON33.js");
|
|
285
289
|
await teamOrchestrateCommand(task, path2, options);
|
|
286
290
|
});
|
|
287
291
|
teamCmd.command("diff <orchestration-id> [path]").description("Show diff of changes from a completed orchestration").option("--full", "Show full file contents").option("--json", "Output as JSON").action(async (orchestrationId, path2, options) => {
|
|
288
|
-
const { teamDiffCommand } = await import("./diff-
|
|
292
|
+
const { teamDiffCommand } = await import("./diff-T6YJSAAC.js");
|
|
289
293
|
await teamDiffCommand(orchestrationId, path2, options);
|
|
290
294
|
});
|
|
291
295
|
teamCmd.command("accept-orch <orchestration-id> [path]").description("Accept orchestration changes").option("-n, --note <text>", "Acceptance note").option("--json", "Output as JSON").action(async (orchestrationId, path2, options) => {
|
|
292
|
-
const { teamAcceptOrchestrationCommand } = await import("./accept-orchestration-
|
|
296
|
+
const { teamAcceptOrchestrationCommand } = await import("./accept-orchestration-XXANWJVZ.js");
|
|
293
297
|
await teamAcceptOrchestrationCommand(orchestrationId, path2, options);
|
|
294
298
|
});
|
|
295
299
|
teamCmd.command("reject-orch <orchestration-id> [path]").description("Reject orchestration changes").option("-r, --reason <text>", "Rejection reason").option("--cleanup", "Delete created files").option("--json", "Output as JSON").action(async (orchestrationId, path2, options) => {
|
|
296
|
-
const { teamRejectOrchestrationCommand } = await import("./accept-orchestration-
|
|
300
|
+
const { teamRejectOrchestrationCommand } = await import("./accept-orchestration-XXANWJVZ.js");
|
|
297
301
|
await teamRejectOrchestrationCommand(orchestrationId, path2, options);
|
|
298
302
|
});
|
|
299
303
|
teamCmd.command("cost [path]").description("Show cost summary for orchestrations").option("--from <date>", "From date (ISO format)").option("--to <date>", "To date (ISO format)").option("--days <n>", "Last N days").option("-d, --detailed", "Show detailed breakdown").option("--json", "Output as JSON").action(async (path2, options) => {
|
|
@@ -309,7 +313,7 @@ teamCmd.command("providers [path]").description("Show available agent providers
|
|
|
309
313
|
await teamProvidersCommand(path2, options);
|
|
310
314
|
});
|
|
311
315
|
teamCmd.command("models [path]").description("Configure or view agent model assignments").option("--refresh", "Refresh model cache from environment").option("--json", "Output as JSON").action(async (path2, options) => {
|
|
312
|
-
const { teamModelsCommand } = await import("./team-
|
|
316
|
+
const { teamModelsCommand } = await import("./team-VH3HYABB.js");
|
|
313
317
|
await teamModelsCommand(path2, options);
|
|
314
318
|
});
|
|
315
319
|
var agentsCmd = teamCmd.command("agents").description("Agent management commands");
|
|
@@ -324,7 +328,7 @@ agentsCmd.action(() => {
|
|
|
324
328
|
console.log("\nRun `paradigm team agents suggest --help` for options.\n");
|
|
325
329
|
});
|
|
326
330
|
teamCmd.action(async () => {
|
|
327
|
-
const { teamStatusCommand } = await import("./team-
|
|
331
|
+
const { teamStatusCommand } = await import("./team-VH3HYABB.js");
|
|
328
332
|
await teamStatusCommand(void 0, {});
|
|
329
333
|
});
|
|
330
334
|
var pluginCmd = program.command("plugin").description("Plugin management commands");
|
|
@@ -338,19 +342,19 @@ pluginCmd.action(async () => {
|
|
|
338
342
|
});
|
|
339
343
|
var workspaceCmd = program.command("workspace").description("Multi-project workspace commands");
|
|
340
344
|
workspaceCmd.command("init").description("Create a .paradigm-workspace file from sibling projects").option("-n, --name <name>", "Workspace name (default: directory name)").option("-f, --force", "Overwrite existing workspace file").action(async (options) => {
|
|
341
|
-
const { workspaceInitCommand } = await import("./workspace-
|
|
345
|
+
const { workspaceInitCommand } = await import("./workspace-5RBSALXC.js");
|
|
342
346
|
await workspaceInitCommand(options);
|
|
343
347
|
});
|
|
344
348
|
workspaceCmd.command("status").description("Show workspace member status and symbol counts").option("--json", "Output as JSON").action(async (options) => {
|
|
345
|
-
const { workspaceStatusCommand } = await import("./workspace-
|
|
349
|
+
const { workspaceStatusCommand } = await import("./workspace-5RBSALXC.js");
|
|
346
350
|
await workspaceStatusCommand(options);
|
|
347
351
|
});
|
|
348
352
|
workspaceCmd.command("reindex").description("Rebuild scan-index.json for all workspace members").option("-q, --quiet", "Suppress progress output").action(async (options) => {
|
|
349
|
-
const { workspaceReindexCommand } = await import("./workspace-
|
|
353
|
+
const { workspaceReindexCommand } = await import("./workspace-5RBSALXC.js");
|
|
350
354
|
await workspaceReindexCommand(options);
|
|
351
355
|
});
|
|
352
356
|
workspaceCmd.action(async () => {
|
|
353
|
-
const { workspaceStatusCommand } = await import("./workspace-
|
|
357
|
+
const { workspaceStatusCommand } = await import("./workspace-5RBSALXC.js");
|
|
354
358
|
await workspaceStatusCommand({});
|
|
355
359
|
});
|
|
356
360
|
program.command("doctor").description("Health check - validate Paradigm setup").option("--context", "Run only context audit checks (CLAUDE.md quality)").action(async (options) => {
|
|
@@ -379,19 +383,19 @@ program.command("watch").description("Watch for changes and auto-sync IDE files"
|
|
|
379
383
|
await watchCommand();
|
|
380
384
|
});
|
|
381
385
|
program.command("summary").description("Generate .paradigm/project.md with project stats").action(async () => {
|
|
382
|
-
const { summaryCommand } = await import("./summary-
|
|
386
|
+
const { summaryCommand } = await import("./summary-R4CSYNNP.js");
|
|
383
387
|
await summaryCommand();
|
|
384
388
|
});
|
|
385
389
|
program.command("constellation [path]").alias("const").description("Generate .paradigm/constellation.json - symbol relationship graph for AI agents").option("-f, --format <format>", "Output format: json or yaml", "json").option("-o, --output <path>", "Custom output path").option("-q, --quiet", "Suppress output").action(async (path2, options) => {
|
|
386
|
-
const { constellationCommand } = await import("./constellation-
|
|
390
|
+
const { constellationCommand } = await import("./constellation-LZ6XIKDT.js");
|
|
387
391
|
await constellationCommand(path2, options);
|
|
388
392
|
});
|
|
389
393
|
program.command("beacon [path]").description("Generate .paradigm/beacon.md - quick-start orientation for AI agents").option("-r, --refresh", "Regenerate even if beacon exists").option("-o, --output <path>", "Custom output path").option("--json", "Output as JSON (for AI agent queries)").option("-q, --quiet", "Suppress output").action(async (path2, options) => {
|
|
390
|
-
const { beaconCommand } = await import("./beacon-
|
|
394
|
+
const { beaconCommand } = await import("./beacon-BTLQMYQL.js");
|
|
391
395
|
await beaconCommand(path2, options);
|
|
392
396
|
});
|
|
393
397
|
program.command("ripple <symbol> [path]").description("Show change impact analysis for a symbol").option("-d, --depth <depth>", "Analysis depth (default: 1)", "1").option("--json", "Output as JSON").option("-q, --quiet", "Suppress output").action(async (symbol, path2, options) => {
|
|
394
|
-
const { rippleCommand } = await import("./ripple-
|
|
398
|
+
const { rippleCommand } = await import("./ripple-QTXKJCEI.js");
|
|
395
399
|
await rippleCommand(symbol, path2, options);
|
|
396
400
|
});
|
|
397
401
|
var threadCmd = program.command("thread").description("Session continuity - pass context between AI agent sessions");
|
package/dist/mcp.js
CHANGED
|
@@ -76,7 +76,7 @@ import {
|
|
|
76
76
|
validatePersona,
|
|
77
77
|
validateProtocol,
|
|
78
78
|
validatePurposeFile
|
|
79
|
-
} from "./chunk-
|
|
79
|
+
} from "./chunk-PFLWLC6J.js";
|
|
80
80
|
import {
|
|
81
81
|
deleteLoreEntry,
|
|
82
82
|
loadLoreEntries,
|
|
@@ -6420,6 +6420,14 @@ var purposeAddComponentTool = {
|
|
|
6420
6420
|
type: "array",
|
|
6421
6421
|
items: { type: "string" },
|
|
6422
6422
|
description: 'Component references (e.g. ["#stripe-service"])'
|
|
6423
|
+
},
|
|
6424
|
+
type: {
|
|
6425
|
+
type: "string",
|
|
6426
|
+
description: 'Component type (e.g., "view", "service", "model", "tool"). Open string per project vocabulary.'
|
|
6427
|
+
},
|
|
6428
|
+
parent: {
|
|
6429
|
+
type: "string",
|
|
6430
|
+
description: 'Parent component (e.g., "#payment-page"). Establishes hierarchy.'
|
|
6423
6431
|
}
|
|
6424
6432
|
},
|
|
6425
6433
|
required: ["purposeFile", "id", "description"]
|
|
@@ -6957,7 +6965,9 @@ async function handleAddComponent(args, ctx, reloadContext2) {
|
|
|
6957
6965
|
gates,
|
|
6958
6966
|
signals,
|
|
6959
6967
|
aspects,
|
|
6960
|
-
components
|
|
6968
|
+
components,
|
|
6969
|
+
type: componentType,
|
|
6970
|
+
parent
|
|
6961
6971
|
} = args;
|
|
6962
6972
|
const filePath = resolvePurposeFilePath(purposeFile, ctx.rootDir);
|
|
6963
6973
|
const data = readPurposeFile(filePath);
|
|
@@ -6977,6 +6987,8 @@ async function handleAddComponent(args, ctx, reloadContext2) {
|
|
|
6977
6987
|
if (signals !== void 0) item.signals = signals.map((s) => ensurePrefix(s, "!"));
|
|
6978
6988
|
if (aspects !== void 0) item.aspects = aspects.map((a) => ensurePrefix(a, "~"));
|
|
6979
6989
|
if (components !== void 0) item.components = components.map((c) => ensurePrefix(c, "#"));
|
|
6990
|
+
if (componentType !== void 0) item.type = componentType;
|
|
6991
|
+
if (parent !== void 0) item.parent = ensurePrefix(parent, "#");
|
|
6980
6992
|
existing[bareId] = item;
|
|
6981
6993
|
data[sec] = existing;
|
|
6982
6994
|
writePurposeFile(filePath, data);
|
|
@@ -14200,6 +14212,10 @@ function registerTools(server, getContext2, reloadContext2) {
|
|
|
14200
14212
|
includeWorkspace: {
|
|
14201
14213
|
type: "boolean",
|
|
14202
14214
|
description: "Also search sibling workspace projects (default: false). Requires workspace configured in config.yaml."
|
|
14215
|
+
},
|
|
14216
|
+
componentType: {
|
|
14217
|
+
type: "string",
|
|
14218
|
+
description: 'Filter components by type (e.g., "view", "service", "tool"). Only applies to #component symbols.'
|
|
14203
14219
|
}
|
|
14204
14220
|
},
|
|
14205
14221
|
required: ["query"]
|
|
@@ -14382,13 +14398,16 @@ function registerTools(server, getContext2, reloadContext2) {
|
|
|
14382
14398
|
const toolResult = await (async () => {
|
|
14383
14399
|
switch (name) {
|
|
14384
14400
|
case "paradigm_search": {
|
|
14385
|
-
const { query, type, limit = 10, fuzzy = true, includeWorkspace = false } = args;
|
|
14386
|
-
const cacheKey = `search:${query}:${type || ""}:${limit}:${fuzzy}:${includeWorkspace}`;
|
|
14401
|
+
const { query, type, limit = 10, fuzzy = true, includeWorkspace = false, componentType } = args;
|
|
14402
|
+
const cacheKey = `search:${query}:${type || ""}:${limit}:${fuzzy}:${includeWorkspace}:${componentType || ""}`;
|
|
14387
14403
|
let results = await toolCache.getOrCompute(cacheKey, () => {
|
|
14388
14404
|
let r = searchSymbols(ctx.index, query);
|
|
14389
14405
|
if (type) {
|
|
14390
14406
|
r = r.filter((s) => s.type === type);
|
|
14391
14407
|
}
|
|
14408
|
+
if (componentType) {
|
|
14409
|
+
r = r.filter((s) => s.componentType === componentType);
|
|
14410
|
+
}
|
|
14392
14411
|
return r;
|
|
14393
14412
|
});
|
|
14394
14413
|
let fuzzyMatches = [];
|
|
@@ -14411,7 +14430,9 @@ function registerTools(server, getContext2, reloadContext2) {
|
|
|
14411
14430
|
symbol: s.symbol,
|
|
14412
14431
|
type: s.type,
|
|
14413
14432
|
description: s.description,
|
|
14414
|
-
filePath: s.filePath
|
|
14433
|
+
filePath: s.filePath,
|
|
14434
|
+
...s.componentType ? { componentType: s.componentType } : {},
|
|
14435
|
+
...s.parentSymbol ? { parentSymbol: s.parentSymbol } : {}
|
|
14415
14436
|
}))
|
|
14416
14437
|
};
|
|
14417
14438
|
if (fuzzyMatches.length > 0) {
|
|
@@ -14734,6 +14755,14 @@ function registerTools(server, getContext2, reloadContext2) {
|
|
|
14734
14755
|
}
|
|
14735
14756
|
} catch {
|
|
14736
14757
|
}
|
|
14758
|
+
const allComponents = getSymbolsByType(ctx.index, "component");
|
|
14759
|
+
const componentTypeBreakdown = {};
|
|
14760
|
+
for (const comp of allComponents) {
|
|
14761
|
+
if (comp.componentType) {
|
|
14762
|
+
componentTypeBreakdown[comp.componentType] = (componentTypeBreakdown[comp.componentType] || 0) + 1;
|
|
14763
|
+
}
|
|
14764
|
+
}
|
|
14765
|
+
const untypedCount = allComponents.filter((c) => !c.componentType).length;
|
|
14737
14766
|
return JSON.stringify({
|
|
14738
14767
|
project: ctx.projectName,
|
|
14739
14768
|
symbolSystem: "v2",
|
|
@@ -14745,11 +14774,17 @@ function registerTools(server, getContext2, reloadContext2) {
|
|
|
14745
14774
|
"~ aspects": counts.aspect
|
|
14746
14775
|
},
|
|
14747
14776
|
total,
|
|
14777
|
+
...Object.keys(componentTypeBreakdown).length > 0 ? {
|
|
14778
|
+
componentTypes: {
|
|
14779
|
+
...componentTypeBreakdown,
|
|
14780
|
+
...untypedCount > 0 ? { "(untyped)": untypedCount } : {}
|
|
14781
|
+
}
|
|
14782
|
+
} : {},
|
|
14748
14783
|
examples,
|
|
14749
14784
|
hasPortalYaml: ctx.gateConfig !== null,
|
|
14750
14785
|
purposeFiles: ctx.aggregation.purposeFiles.length,
|
|
14751
14786
|
...protocols ? { protocols } : {},
|
|
14752
|
-
note: "Symbol System v2: Use tags [feature], [state], [integration], [idea] for classification",
|
|
14787
|
+
note: "Symbol System v2: Use tags [feature], [state], [integration], [idea] for classification. Use type field for structural role (view, service, tool, etc.)",
|
|
14753
14788
|
environment: {
|
|
14754
14789
|
os: platform2,
|
|
14755
14790
|
shell,
|
|
@@ -14963,7 +14998,7 @@ Update command:
|
|
|
14963
14998
|
trackToolCall(noWsText.length, name);
|
|
14964
14999
|
return { content: [{ type: "text", text: noWsText }] };
|
|
14965
15000
|
}
|
|
14966
|
-
const { rebuildStaticFiles: rebuildStaticFiles2 } = await import("./reindex-
|
|
15001
|
+
const { rebuildStaticFiles: rebuildStaticFiles2 } = await import("./reindex-YC7LD4MN.js");
|
|
14967
15002
|
const memberResults = [];
|
|
14968
15003
|
for (const member of ctx.workspace.config.members) {
|
|
14969
15004
|
const memberAbsPath = path29.resolve(path29.dirname(ctx.workspace.workspacePath), member.path);
|