@a-company/paradigm 3.0.0 → 3.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.
Files changed (27) hide show
  1. package/dist/{chunk-MOZPTZ77.js → chunk-GWM2WRXL.js} +1 -1
  2. package/dist/{chunk-CH6VCTXQ.js → chunk-QS36NGWV.js} +1 -1
  3. package/dist/{chunk-A5BKW7QV.js → chunk-YCLN7WXV.js} +4 -0
  4. package/dist/{chunk-2NMUSZFA.js → chunk-ZPN7MXRA.js} +1 -1
  5. package/dist/{doctor-QMPFQONP.js → doctor-JBIV5PMN.js} +2 -2
  6. package/dist/index.js +13 -11
  7. package/dist/{sentinel-J64XJVTU.js → sentinel-RSEXIRXM.js} +1 -1
  8. package/dist/{server-SKGY7GFZ.js → server-E2CNZC4K.js} +26 -7
  9. package/dist/{server-VUYAY7TP.js → server-NXG5N7JE.js} +1 -1
  10. package/dist/{shift-BJKPOYEF.js → shift-NABNKPGL.js} +4 -4
  11. package/dist/{summary-ZIEIBCAF.js → summary-5SBFO7QK.js} +1 -1
  12. package/dist/{sync-PF3MJ3E4.js → sync-5KSTPJ4B.js} +2 -2
  13. package/dist/{university-IXTJCROL.js → university-65YJZ2LW.js} +10 -2
  14. package/dist/university-content/courses/para-101.json +561 -0
  15. package/dist/university-content/courses/para-201.json +707 -0
  16. package/dist/university-content/courses/para-301.json +654 -0
  17. package/dist/university-content/courses/para-401.json +640 -0
  18. package/dist/university-content/plsat/v2.0.json +760 -0
  19. package/dist/university-content/plsat/v3.0.json +1162 -0
  20. package/dist/university-content/reference.json +336 -0
  21. package/dist/university-ui/assets/index-CoBFthx2.js +87 -0
  22. package/dist/university-ui/assets/index-CoBFthx2.js.map +1 -0
  23. package/dist/university-ui/assets/index-DW2N5NTk.css +1 -0
  24. package/dist/university-ui/index.html +17 -0
  25. package/dist/{upgrade-X4PVS7UV.js → upgrade-TIYFQYPO.js} +1 -1
  26. package/dist/{watch-QYGAIYZ3.js → watch-2XEYUH43.js} +1 -1
  27. package/package.json +3 -2
@@ -18,7 +18,7 @@ import {
18
18
  detectIDE,
19
19
  loadParadigmFiles,
20
20
  syncToIDE
21
- } from "./chunk-A5BKW7QV.js";
21
+ } from "./chunk-YCLN7WXV.js";
22
22
  import {
23
23
  log
24
24
  } from "./chunk-4NCFWYGG.js";
@@ -8,7 +8,7 @@ import {
8
8
  syncToIDE,
9
9
  writeMcpConfig,
10
10
  writeNestedContexts
11
- } from "./chunk-A5BKW7QV.js";
11
+ } from "./chunk-YCLN7WXV.js";
12
12
  import {
13
13
  log
14
14
  } from "./chunk-4NCFWYGG.js";
@@ -532,6 +532,8 @@ ${f.content}`).join("\n\n---\n\n");
532
532
  const overview = generateOverview(config);
533
533
  return frontmatter("Paradigm core rules - project overview and fundamentals", { alwaysApply: true }) + `# Paradigm - ${projectName}
534
534
 
535
+ > **Author:** Matt Canoy ([@ascend42](https://github.com/ascend42)) | **Repo:** [github.com/ascend42/a-paradigm](https://github.com/ascend42/a-paradigm) | **npm:** [@a-company/paradigm](https://www.npmjs.com/package/@a-company/paradigm)
536
+
535
537
  ` + overview + "\n\n" + generateUpdateRules(config);
536
538
  }
537
539
  /**
@@ -1499,6 +1501,8 @@ var ClaudeAdapter = class {
1499
1501
  sections.push(`# ${projectName} - Claude Context`);
1500
1502
  sections.push("");
1501
1503
  sections.push("> **Paradigm v2.0** | For Claude Code, Claude API, and Claude-native interfaces");
1504
+ sections.push(">");
1505
+ sections.push("> **Author:** Matt Canoy ([@ascend42](https://github.com/ascend42)) | **Repo:** [github.com/ascend42/a-paradigm](https://github.com/ascend42/a-paradigm) | **npm:** [@a-company/paradigm](https://www.npmjs.com/package/@a-company/paradigm) | **Plugin:** `paradigm` via Claude Code marketplace");
1502
1506
  sections.push("");
1503
1507
  sections.push("## Project Overview");
1504
1508
  sections.push("");
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  detectIDE,
4
4
  getAdapter
5
- } from "./chunk-A5BKW7QV.js";
5
+ } from "./chunk-YCLN7WXV.js";
6
6
  import {
7
7
  log
8
8
  } from "./chunk-4NCFWYGG.js";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  doctorCommand
4
- } from "./chunk-2NMUSZFA.js";
5
- import "./chunk-A5BKW7QV.js";
4
+ } from "./chunk-ZPN7MXRA.js";
5
+ import "./chunk-YCLN7WXV.js";
6
6
  import "./chunk-4NCFWYGG.js";
7
7
  import "./chunk-YO6DVTL7.js";
8
8
  import "./chunk-MO4EEYFW.js";
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  initCommand
4
- } from "./chunk-MOZPTZ77.js";
4
+ } from "./chunk-GWM2WRXL.js";
5
5
  import "./chunk-CHSHON3O.js";
6
6
  import "./chunk-N6PJAPDE.js";
7
7
  import {
@@ -15,7 +15,7 @@ import {
15
15
  import {
16
16
  findGateFiles
17
17
  } from "./chunk-IRKUEJVW.js";
18
- import "./chunk-A5BKW7QV.js";
18
+ import "./chunk-YCLN7WXV.js";
19
19
  import {
20
20
  log
21
21
  } from "./chunk-4NCFWYGG.js";
@@ -25,6 +25,7 @@ import "./chunk-MO4EEYFW.js";
25
25
  // src/index.ts
26
26
  import { Command } from "commander";
27
27
  import chalk2 from "chalk";
28
+ import { createRequire } from "module";
28
29
 
29
30
  // src/commands/status.ts
30
31
  import * as fs from "fs";
@@ -97,7 +98,8 @@ async function statusCommand() {
97
98
  }
98
99
 
99
100
  // src/index.ts
100
- var VERSION = "2.0.13";
101
+ var require2 = createRequire(import.meta.url);
102
+ var { version: VERSION } = require2("../package.json");
101
103
  var program = new Command();
102
104
  var banner = `
103
105
  ${chalk2.magenta("\u2554\u2550\u2557")}${chalk2.cyan("\u250C\u2500\u2510\u252C\u2500\u2510\u250C\u2500\u2510\u250C\u252C\u2510\u252C \u250C\u2500\u2510\u250C\u252C\u2510")}
@@ -107,7 +109,7 @@ ${chalk2.magenta("\u2569 ")}${chalk2.cyan("\u2534 \u2534\u2534\u2514\u2500\u253
107
109
  program.name("paradigm").description("Unified developer tools ecosystem").version(VERSION).addHelpText("before", banner);
108
110
  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("--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);
109
111
  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").action(async (options) => {
110
- const { shiftCommand } = await import("./shift-BJKPOYEF.js");
112
+ const { shiftCommand } = await import("./shift-NABNKPGL.js");
111
113
  await shiftCommand(options);
112
114
  });
113
115
  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) => {
@@ -151,7 +153,7 @@ premiseCmd.command("snapshot <name>").description("Create a timeline snapshot").
151
153
  await premiseSnapshotCommand(name, options.description);
152
154
  });
153
155
  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) => {
154
- const { syncCommand } = await import("./sync-PF3MJ3E4.js");
156
+ const { syncCommand } = await import("./sync-5KSTPJ4B.js");
155
157
  await syncCommand(ide, options);
156
158
  });
157
159
  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) => {
@@ -169,7 +171,7 @@ probeCmd.command("index [path]").description("Generate probe index (alias for `p
169
171
  await indexCommand(path2, options);
170
172
  });
171
173
  program.command("upgrade [path]").description("Upgrade project with new Paradigm features").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) => {
172
- const { upgradeCommand } = await import("./upgrade-X4PVS7UV.js");
174
+ const { upgradeCommand } = await import("./upgrade-TIYFQYPO.js");
173
175
  await upgradeCommand(path2, options);
174
176
  });
175
177
  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").action(async (path2, options) => {
@@ -276,15 +278,15 @@ teamCmd.action(async () => {
276
278
  await teamStatusCommand(void 0, {});
277
279
  });
278
280
  program.command("doctor").description("Health check - validate Paradigm setup").action(async () => {
279
- const { doctorCommand } = await import("./doctor-QMPFQONP.js");
281
+ const { doctorCommand } = await import("./doctor-JBIV5PMN.js");
280
282
  await doctorCommand();
281
283
  });
282
284
  program.command("watch").description("Watch for changes and auto-sync IDE files").action(async () => {
283
- const { watchCommand } = await import("./watch-QYGAIYZ3.js");
285
+ const { watchCommand } = await import("./watch-2XEYUH43.js");
284
286
  await watchCommand();
285
287
  });
286
288
  program.command("summary").description("Generate .paradigm/project.md with project stats").action(async () => {
287
- const { summaryCommand } = await import("./summary-ZIEIBCAF.js");
289
+ const { summaryCommand } = await import("./summary-5SBFO7QK.js");
288
290
  await summaryCommand();
289
291
  });
290
292
  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) => {
@@ -579,11 +581,11 @@ loreCmd.option("-p, --port <port>", "Port to run on", "3840").option("--no-open"
579
581
  await loreServeCommand(void 0, options);
580
582
  });
581
583
  program.command("sentinel [path]").description("Launch the Sentinel UI - unified codebase intelligence visualizer").option("-p, --port <port>", "Port to run on", "3838").option("--no-open", "Don't open browser automatically").action(async (path2, options) => {
582
- const { sentinelCommand } = await import("./sentinel-J64XJVTU.js");
584
+ const { sentinelCommand } = await import("./sentinel-RSEXIRXM.js");
583
585
  await sentinelCommand(path2, options);
584
586
  });
585
587
  program.command("university").description("Launch Paradigm University - interactive learning platform & PLSAT certification").option("-p, --port <port>", "Port to run on", "3839").option("--no-open", "Don't open browser automatically").action(async (options) => {
586
- const { universityCommand } = await import("./university-IXTJCROL.js");
588
+ const { universityCommand } = await import("./university-65YJZ2LW.js");
587
589
  await universityCommand(void 0, options);
588
590
  });
589
591
  program.parse();
@@ -9,7 +9,7 @@ async function sentinelCommand(path, options) {
9
9
  const shouldOpen = options.open !== false;
10
10
  console.log(chalk.cyan("\nStarting Sentinel...\n"));
11
11
  try {
12
- const { startServer } = await import("./server-VUYAY7TP.js");
12
+ const { startServer } = await import("./server-NXG5N7JE.js");
13
13
  console.log(chalk.gray(`Project: ${projectDir}`));
14
14
  console.log(chalk.gray(`Port: ${port}`));
15
15
  console.log();
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import "./chunk-MO4EEYFW.js";
3
3
 
4
- // ../university/dist/chunk-4XVUE7NO.js
4
+ // ../university/dist/chunk-3ZAP26AP.js
5
5
  import express from "express";
6
6
  import * as path3 from "path";
7
7
  import * as fs3 from "fs";
@@ -201,7 +201,25 @@ var log = {
201
201
  };
202
202
  }
203
203
  };
204
- function createApp() {
204
+ function resolveAssetPaths(options) {
205
+ if (options?.contentDir && options?.uiDistPath) {
206
+ return { contentDir: options.contentDir, uiDistPath: options.uiDistPath };
207
+ }
208
+ const bundledContent = path3.join(__dirname, "university-content");
209
+ const bundledUi = path3.join(__dirname, "university-ui");
210
+ if (fs3.existsSync(bundledContent) && fs3.existsSync(bundledUi)) {
211
+ return {
212
+ contentDir: options?.contentDir || bundledContent,
213
+ uiDistPath: options?.uiDistPath || bundledUi
214
+ };
215
+ }
216
+ const packageRoot = findPackageRoot(__dirname);
217
+ return {
218
+ contentDir: options?.contentDir || path3.join(packageRoot, "src", "content"),
219
+ uiDistPath: options?.uiDistPath || path3.join(packageRoot, "ui", "dist")
220
+ };
221
+ }
222
+ function createApp(options) {
205
223
  const app = express();
206
224
  app.use(express.json());
207
225
  app.use((_req, res, next) => {
@@ -210,8 +228,7 @@ function createApp() {
210
228
  res.header("Access-Control-Allow-Headers", "Content-Type");
211
229
  next();
212
230
  });
213
- const packageRoot = findPackageRoot(__dirname);
214
- const contentDir = path3.join(packageRoot, "src", "content");
231
+ const { contentDir, uiDistPath } = resolveAssetPaths(options);
215
232
  app.use("/api/courses", createCoursesRouter(contentDir));
216
233
  app.use("/api/plsat", createPlsatRouter(contentDir));
217
234
  app.get("/api/reference", (_req, res) => {
@@ -226,10 +243,9 @@ function createApp() {
226
243
  app.get("/api/health", (_req, res) => {
227
244
  res.json({ status: "ok", timestamp: (/* @__PURE__ */ new Date()).toISOString() });
228
245
  });
229
- const uiDistPath = path3.join(packageRoot, "ui", "dist");
230
246
  if (fs3.existsSync(uiDistPath)) {
231
247
  app.use(express.static(uiDistPath));
232
- app.get("*", (req, res) => {
248
+ app.get("{*path}", (req, res) => {
233
249
  if (!req.path.startsWith("/api")) {
234
250
  res.sendFile(path3.join(uiDistPath, "index.html"));
235
251
  }
@@ -238,7 +254,10 @@ function createApp() {
238
254
  return app;
239
255
  }
240
256
  async function startServer(options) {
241
- const app = createApp();
257
+ const app = createApp({
258
+ contentDir: options.contentDir,
259
+ uiDistPath: options.uiDistPath
260
+ });
242
261
  log.component("university-server").info("Starting server", { port: options.port });
243
262
  return new Promise((resolve, reject) => {
244
263
  const server = app.listen(options.port, () => {
@@ -6089,7 +6089,7 @@ function createApp(options) {
6089
6089
  const uiDistPath = path3.join(__dirname, "..", "..", "ui", "dist");
6090
6090
  if (fs2.existsSync(uiDistPath)) {
6091
6091
  app.use(express.static(uiDistPath));
6092
- app.get("*", (req, res) => {
6092
+ app.get("{*path}", (req, res) => {
6093
6093
  if (!req.path.startsWith("/api")) {
6094
6094
  res.sendFile(path3.join(uiDistPath, "index.html"));
6095
6095
  }
@@ -16,7 +16,7 @@ import {
16
16
  import {
17
17
  indexCommand,
18
18
  initCommand
19
- } from "./chunk-MOZPTZ77.js";
19
+ } from "./chunk-GWM2WRXL.js";
20
20
  import {
21
21
  detectDiscipline
22
22
  } from "./chunk-CHSHON3O.js";
@@ -26,11 +26,11 @@ import "./chunk-PW2EXJQT.js";
26
26
  import "./chunk-IRKUEJVW.js";
27
27
  import {
28
28
  syncCommand
29
- } from "./chunk-CH6VCTXQ.js";
29
+ } from "./chunk-QS36NGWV.js";
30
30
  import {
31
31
  doctorCommand
32
- } from "./chunk-2NMUSZFA.js";
33
- import "./chunk-A5BKW7QV.js";
32
+ } from "./chunk-ZPN7MXRA.js";
33
+ import "./chunk-YCLN7WXV.js";
34
34
  import {
35
35
  log
36
36
  } from "./chunk-4NCFWYGG.js";
@@ -7,7 +7,7 @@ import "./chunk-IRKUEJVW.js";
7
7
  import {
8
8
  detectIDE,
9
9
  getAdapter
10
- } from "./chunk-A5BKW7QV.js";
10
+ } from "./chunk-YCLN7WXV.js";
11
11
  import "./chunk-YO6DVTL7.js";
12
12
  import "./chunk-MO4EEYFW.js";
13
13
 
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  syncCommand
4
- } from "./chunk-CH6VCTXQ.js";
5
- import "./chunk-A5BKW7QV.js";
4
+ } from "./chunk-QS36NGWV.js";
5
+ import "./chunk-YCLN7WXV.js";
6
6
  import "./chunk-4NCFWYGG.js";
7
7
  import "./chunk-YO6DVTL7.js";
8
8
  import "./chunk-MO4EEYFW.js";
@@ -3,17 +3,25 @@ import "./chunk-MO4EEYFW.js";
3
3
 
4
4
  // src/commands/university.ts
5
5
  import chalk from "chalk";
6
+ import * as path from "path";
7
+ import { fileURLToPath } from "url";
8
+ var __filename = fileURLToPath(import.meta.url);
9
+ var __dirname = path.dirname(__filename);
6
10
  async function universityCommand(_path, options) {
7
11
  const port = parseInt(options.port || "3839", 10);
8
12
  const shouldOpen = options.open !== false;
9
13
  console.log(chalk.cyan("\nOpening the campus gates...\n"));
10
14
  try {
11
- const { startServer } = await import("./server-SKGY7GFZ.js");
15
+ const { startServer } = await import("./server-E2CNZC4K.js");
16
+ const contentDir = path.resolve(__dirname, "university-content");
17
+ const uiDistPath = path.resolve(__dirname, "university-ui");
12
18
  console.log(chalk.gray(`Port: ${port}`));
13
19
  console.log();
14
20
  await startServer({
15
21
  port,
16
- open: shouldOpen
22
+ open: shouldOpen,
23
+ contentDir,
24
+ uiDistPath
17
25
  });
18
26
  console.log(chalk.green(`
19
27
  Paradigm University is running at http://localhost:${port}`));