@a-company/paradigm 3.24.1 → 3.27.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-AAYFKS74.js → accept-orchestration-6EM5EHXA.js} +4 -4
- package/dist/{auto-B22FVSQI.js → auto-24ICVUH4.js} +1 -1
- package/dist/{chunk-EZ6XW6FB.js → chunk-7IJ5JVKT.js} +1 -1
- package/dist/{chunk-6EQRU7WC.js → chunk-J26YQVAK.js} +1 -1
- package/dist/{chunk-VHSTF72C.js → chunk-N6RNYCZD.js} +1 -1
- package/dist/{chunk-XKI55IFI.js → chunk-SCC77UUP.js} +82 -62
- package/dist/chunk-UPLDI7CN.js +1334 -0
- package/dist/{chunk-GC6X3YM7.js → chunk-ZOH24ZPF.js} +5 -5
- package/dist/conductor-CAIY5LJA.js +74 -0
- package/dist/{diff-QC7PWIPF.js → diff-AH7L4PRQ.js} +4 -4
- package/dist/discipline-5F5OVTXB.js +24 -0
- package/dist/{doctor-RVODPMHJ.js → doctor-INBOLZC7.js} +1 -1
- package/dist/index.js +57 -25
- package/dist/{list-CAL7KS7B.js → list-QTFWN35D.js} +3 -2
- package/dist/mcp.js +285 -23
- package/dist/{orchestrate-NNNWNELP.js → orchestrate-HMSQ2CED.js} +4 -4
- package/dist/{providers-NKGY36QF.js → providers-YW3FG6DA.js} +1 -1
- package/dist/{reindex-CMZARW5K.js → reindex-YG3KIXAK.js} +1 -1
- package/dist/{shift-R6TQ6MBP.js → shift-DRF5M3G6.js} +23 -17
- package/dist/{spawn-52PASJJL.js → spawn-DIY7T4QW.js} +2 -2
- package/dist/{team-JZHIH7H5.js → team-YOGT2Q2X.js} +5 -5
- package/dist/{timeline-B6TMGWRU.js → timeline-RKXNRMKF.js} +4 -3
- package/dist/university-content/courses/.purpose +4 -4
- package/dist/university-content/courses/para-101.json +1 -1
- package/dist/university-content/courses/para-201.json +18 -2
- package/dist/university-content/plsat/.purpose +18 -0
- package/dist/university-content/plsat/v3.0.json +105 -0
- package/dist/university-ui/assets/{index-BPzqnvrg.js → index-TcsCEBMo.js} +2 -2
- package/dist/university-ui/assets/{index-BPzqnvrg.js.map → index-TcsCEBMo.js.map} +1 -1
- package/dist/university-ui/index.html +1 -1
- package/package.json +1 -1
- package/templates/paradigm/config.yaml +1 -0
- package/dist/chunk-CHSHON3O.js +0 -669
- package/dist/{chunk-7WTOOH23.js → chunk-5SXMV4SP.js} +0 -0
- package/dist/{chunk-4UC6AQOC.js → chunk-C5ZE6WEX.js} +0 -0
- package/dist/{flow-KZKMMXJC.js → flow-UFMPVOEM.js} +1 -1
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-7IJ5JVKT.js";
|
|
80
80
|
import {
|
|
81
81
|
deleteLoreEntry,
|
|
82
82
|
loadLoreEntries,
|
|
@@ -757,7 +757,8 @@ async function loadProjectContext(rootDir) {
|
|
|
757
757
|
if (config && typeof config.workspace === "string") {
|
|
758
758
|
workspace = loadWorkspaceContext(absoluteRoot, config.workspace);
|
|
759
759
|
}
|
|
760
|
-
} catch {
|
|
760
|
+
} catch (e) {
|
|
761
|
+
console.error(`[paradigm] Warning: Failed to load workspace config: ${e.message}`);
|
|
761
762
|
}
|
|
762
763
|
}
|
|
763
764
|
return {
|
|
@@ -2025,8 +2026,8 @@ function registerResources(server, getContext2) {
|
|
|
2025
2026
|
}
|
|
2026
2027
|
|
|
2027
2028
|
// ../paradigm-mcp/src/tools/index.ts
|
|
2028
|
-
import * as
|
|
2029
|
-
import * as
|
|
2029
|
+
import * as os4 from "os";
|
|
2030
|
+
import * as path29 from "path";
|
|
2030
2031
|
import {
|
|
2031
2032
|
ListToolsRequestSchema,
|
|
2032
2033
|
CallToolRequestSchema
|
|
@@ -2790,7 +2791,7 @@ function navigateExplore(config, target, rootDir) {
|
|
|
2790
2791
|
}
|
|
2791
2792
|
if (result.paths.length === 0) {
|
|
2792
2793
|
const areaSymbols = Object.entries(config.symbols).filter(
|
|
2793
|
-
([sym,
|
|
2794
|
+
([sym, path30]) => sym.toLowerCase().includes(targetLower) || path30.toLowerCase().includes(targetLower)
|
|
2794
2795
|
).slice(0, 10);
|
|
2795
2796
|
result.paths = [...new Set(areaSymbols.map(([, p]) => p))];
|
|
2796
2797
|
result.symbols = areaSymbols.map(([s]) => s);
|
|
@@ -11288,8 +11289,8 @@ function generateRunId() {
|
|
|
11288
11289
|
var TEMPLATE_REGEX = /\{\{([^}]+)\}\}/g;
|
|
11289
11290
|
function interpolate(value, scope) {
|
|
11290
11291
|
if (typeof value === "string") {
|
|
11291
|
-
return value.replace(TEMPLATE_REGEX, (_match,
|
|
11292
|
-
const resolved = resolvePath(
|
|
11292
|
+
return value.replace(TEMPLATE_REGEX, (_match, path30) => {
|
|
11293
|
+
const resolved = resolvePath(path30.trim(), scope);
|
|
11293
11294
|
return resolved !== void 0 ? String(resolved) : _match;
|
|
11294
11295
|
});
|
|
11295
11296
|
}
|
|
@@ -11322,8 +11323,8 @@ function resolvePath(dotPath, scope) {
|
|
|
11322
11323
|
return void 0;
|
|
11323
11324
|
}
|
|
11324
11325
|
}
|
|
11325
|
-
function deepGet(obj,
|
|
11326
|
-
const parts =
|
|
11326
|
+
function deepGet(obj, path30) {
|
|
11327
|
+
const parts = path30.split(/[.\[\]]+/).filter(Boolean);
|
|
11327
11328
|
let current = obj;
|
|
11328
11329
|
for (const part of parts) {
|
|
11329
11330
|
if (current == null || typeof current !== "object") return void 0;
|
|
@@ -11559,11 +11560,11 @@ async function runPersonaObject(rootDir, persona, options) {
|
|
|
11559
11560
|
}
|
|
11560
11561
|
async function runChain(rootDir, chainId, options) {
|
|
11561
11562
|
const start = Date.now();
|
|
11562
|
-
const
|
|
11563
|
-
const
|
|
11563
|
+
const fs26 = await import("fs");
|
|
11564
|
+
const path30 = await import("path");
|
|
11564
11565
|
const yaml15 = await import("js-yaml");
|
|
11565
|
-
const chainPath =
|
|
11566
|
-
if (!
|
|
11566
|
+
const chainPath = path30.join(rootDir, ".paradigm", "personas", "chains", `${chainId}.yaml`);
|
|
11567
|
+
if (!fs26.existsSync(chainPath)) {
|
|
11567
11568
|
return {
|
|
11568
11569
|
chain_id: chainId,
|
|
11569
11570
|
status: "error",
|
|
@@ -11572,7 +11573,7 @@ async function runChain(rootDir, chainId, options) {
|
|
|
11572
11573
|
duration_ms: Date.now() - start
|
|
11573
11574
|
};
|
|
11574
11575
|
}
|
|
11575
|
-
const chain = yaml15.load(
|
|
11576
|
+
const chain = yaml15.load(fs26.readFileSync(chainPath, "utf8"));
|
|
11576
11577
|
let permutation;
|
|
11577
11578
|
if (options.permutation && chain.permutations) {
|
|
11578
11579
|
permutation = chain.permutations.find((p) => p.id === options.permutation);
|
|
@@ -11676,8 +11677,8 @@ function validateInterpolation(persona) {
|
|
|
11676
11677
|
const serialized = JSON.stringify(step);
|
|
11677
11678
|
const templates = serialized.match(TEMPLATE_REGEX) || [];
|
|
11678
11679
|
for (const template of templates) {
|
|
11679
|
-
const
|
|
11680
|
-
const [namespace, ...rest] =
|
|
11680
|
+
const path30 = template.replace("{{", "").replace("}}", "").trim();
|
|
11681
|
+
const [namespace, ...rest] = path30.split(".");
|
|
11681
11682
|
const key = rest.join(".");
|
|
11682
11683
|
switch (namespace) {
|
|
11683
11684
|
case "fixtures":
|
|
@@ -13742,9 +13743,259 @@ async function handlePipelineTool(name, args, ctx) {
|
|
|
13742
13743
|
}
|
|
13743
13744
|
}
|
|
13744
13745
|
|
|
13745
|
-
// ../paradigm-mcp/src/tools/
|
|
13746
|
-
import * as path27 from "path";
|
|
13746
|
+
// ../paradigm-mcp/src/tools/conductor.ts
|
|
13747
13747
|
import { execSync as execSync5 } from "child_process";
|
|
13748
|
+
|
|
13749
|
+
// ../paradigm-mcp/src/utils/conductor-loader.ts
|
|
13750
|
+
import * as fs25 from "fs";
|
|
13751
|
+
import * as path27 from "path";
|
|
13752
|
+
import * as os3 from "os";
|
|
13753
|
+
var CONDUCTOR_DIR = path27.join(os3.homedir(), ".conductor");
|
|
13754
|
+
var SESSIONS_DIR = path27.join(CONDUCTOR_DIR, "sessions");
|
|
13755
|
+
function ensureSessionsDir() {
|
|
13756
|
+
if (!fs25.existsSync(SESSIONS_DIR)) {
|
|
13757
|
+
fs25.mkdirSync(SESSIONS_DIR, { recursive: true });
|
|
13758
|
+
}
|
|
13759
|
+
}
|
|
13760
|
+
function registerConductorSession(session) {
|
|
13761
|
+
ensureSessionsDir();
|
|
13762
|
+
const entry = {
|
|
13763
|
+
...session,
|
|
13764
|
+
registeredAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
13765
|
+
};
|
|
13766
|
+
const filePath = path27.join(SESSIONS_DIR, `${session.pid}.json`);
|
|
13767
|
+
fs25.writeFileSync(filePath, JSON.stringify(entry, null, 2), "utf-8");
|
|
13768
|
+
return entry;
|
|
13769
|
+
}
|
|
13770
|
+
function unregisterConductorSession(pid) {
|
|
13771
|
+
const filePath = path27.join(SESSIONS_DIR, `${pid}.json`);
|
|
13772
|
+
if (fs25.existsSync(filePath)) {
|
|
13773
|
+
fs25.unlinkSync(filePath);
|
|
13774
|
+
return true;
|
|
13775
|
+
}
|
|
13776
|
+
return false;
|
|
13777
|
+
}
|
|
13778
|
+
function listConductorSessions() {
|
|
13779
|
+
ensureSessionsDir();
|
|
13780
|
+
const files = fs25.readdirSync(SESSIONS_DIR).filter((f) => f.endsWith(".json"));
|
|
13781
|
+
const sessions = [];
|
|
13782
|
+
for (const file of files) {
|
|
13783
|
+
try {
|
|
13784
|
+
const content = fs25.readFileSync(path27.join(SESSIONS_DIR, file), "utf-8");
|
|
13785
|
+
const session = JSON.parse(content);
|
|
13786
|
+
sessions.push(session);
|
|
13787
|
+
} catch {
|
|
13788
|
+
}
|
|
13789
|
+
}
|
|
13790
|
+
return sessions;
|
|
13791
|
+
}
|
|
13792
|
+
function cleanStaleSessions() {
|
|
13793
|
+
const sessions = listConductorSessions();
|
|
13794
|
+
let cleaned = 0;
|
|
13795
|
+
for (const session of sessions) {
|
|
13796
|
+
if (!isProcessAlive(session.pid)) {
|
|
13797
|
+
unregisterConductorSession(session.pid);
|
|
13798
|
+
cleaned++;
|
|
13799
|
+
}
|
|
13800
|
+
}
|
|
13801
|
+
return cleaned;
|
|
13802
|
+
}
|
|
13803
|
+
function isProcessAlive(pid) {
|
|
13804
|
+
try {
|
|
13805
|
+
process.kill(pid, 0);
|
|
13806
|
+
return true;
|
|
13807
|
+
} catch {
|
|
13808
|
+
return false;
|
|
13809
|
+
}
|
|
13810
|
+
}
|
|
13811
|
+
|
|
13812
|
+
// ../paradigm-mcp/src/tools/conductor.ts
|
|
13813
|
+
function getConductorToolsList() {
|
|
13814
|
+
return [
|
|
13815
|
+
{
|
|
13816
|
+
name: "paradigm_conductor_register",
|
|
13817
|
+
description: 'Register this Claude Code session with Paradigm Conductor. Makes the session visible in the Conductor overlay for voice/gesture/gaze dispatch. Call this when the user says "/conduct" or wants to surface a session to Conductor. ~100 tokens.',
|
|
13818
|
+
inputSchema: {
|
|
13819
|
+
type: "object",
|
|
13820
|
+
properties: {
|
|
13821
|
+
label: {
|
|
13822
|
+
type: "string",
|
|
13823
|
+
description: 'Human-readable label for this session (e.g., "backend refactor", "auth feature")'
|
|
13824
|
+
},
|
|
13825
|
+
terminal: {
|
|
13826
|
+
type: "string",
|
|
13827
|
+
description: 'Terminal bundle ID (e.g., "com.mitchellh.ghostty"). Auto-detected if omitted.'
|
|
13828
|
+
}
|
|
13829
|
+
},
|
|
13830
|
+
required: []
|
|
13831
|
+
},
|
|
13832
|
+
annotations: {
|
|
13833
|
+
title: "Register with Conductor",
|
|
13834
|
+
readOnlyHint: false,
|
|
13835
|
+
destructiveHint: false,
|
|
13836
|
+
idempotentHint: true,
|
|
13837
|
+
openWorldHint: false
|
|
13838
|
+
}
|
|
13839
|
+
},
|
|
13840
|
+
{
|
|
13841
|
+
name: "paradigm_conductor_unregister",
|
|
13842
|
+
description: "Unregister this Claude Code session from Paradigm Conductor. Removes it from the Conductor overlay. Call when ending a session or when the user wants to hide from Conductor. ~50 tokens.",
|
|
13843
|
+
inputSchema: {
|
|
13844
|
+
type: "object",
|
|
13845
|
+
properties: {},
|
|
13846
|
+
required: []
|
|
13847
|
+
},
|
|
13848
|
+
annotations: {
|
|
13849
|
+
title: "Unregister from Conductor",
|
|
13850
|
+
readOnlyHint: false,
|
|
13851
|
+
destructiveHint: false,
|
|
13852
|
+
idempotentHint: true,
|
|
13853
|
+
openWorldHint: false
|
|
13854
|
+
}
|
|
13855
|
+
},
|
|
13856
|
+
{
|
|
13857
|
+
name: "paradigm_conductor_list",
|
|
13858
|
+
description: "List all Claude Code sessions currently registered with Paradigm Conductor. Shows PIDs, project dirs, and labels. ~150 tokens.",
|
|
13859
|
+
inputSchema: {
|
|
13860
|
+
type: "object",
|
|
13861
|
+
properties: {
|
|
13862
|
+
clean: {
|
|
13863
|
+
type: "boolean",
|
|
13864
|
+
description: "If true, clean up stale sessions (dead PIDs) before listing"
|
|
13865
|
+
}
|
|
13866
|
+
},
|
|
13867
|
+
required: []
|
|
13868
|
+
},
|
|
13869
|
+
annotations: {
|
|
13870
|
+
title: "List Conductor sessions",
|
|
13871
|
+
readOnlyHint: true,
|
|
13872
|
+
destructiveHint: false,
|
|
13873
|
+
idempotentHint: true,
|
|
13874
|
+
openWorldHint: false
|
|
13875
|
+
}
|
|
13876
|
+
}
|
|
13877
|
+
];
|
|
13878
|
+
}
|
|
13879
|
+
async function handleConductorTool(name, args, ctx) {
|
|
13880
|
+
switch (name) {
|
|
13881
|
+
case "paradigm_conductor_register": {
|
|
13882
|
+
const pid = process.pid;
|
|
13883
|
+
const projectDir2 = ctx.projectRoot;
|
|
13884
|
+
let terminal = args.terminal;
|
|
13885
|
+
if (!terminal) {
|
|
13886
|
+
terminal = detectTerminalBundleId();
|
|
13887
|
+
}
|
|
13888
|
+
let branch;
|
|
13889
|
+
try {
|
|
13890
|
+
branch = execSync5("git rev-parse --abbrev-ref HEAD", {
|
|
13891
|
+
cwd: projectDir2,
|
|
13892
|
+
encoding: "utf-8",
|
|
13893
|
+
timeout: 3e3
|
|
13894
|
+
}).trim();
|
|
13895
|
+
} catch {
|
|
13896
|
+
}
|
|
13897
|
+
let parentPid;
|
|
13898
|
+
try {
|
|
13899
|
+
const ppid = execSync5(`ps -o ppid= -p ${pid}`, {
|
|
13900
|
+
encoding: "utf-8",
|
|
13901
|
+
timeout: 3e3
|
|
13902
|
+
}).trim();
|
|
13903
|
+
parentPid = parseInt(ppid, 10);
|
|
13904
|
+
if (isNaN(parentPid)) parentPid = void 0;
|
|
13905
|
+
} catch {
|
|
13906
|
+
}
|
|
13907
|
+
const session = registerConductorSession({
|
|
13908
|
+
pid,
|
|
13909
|
+
parentPid,
|
|
13910
|
+
projectDir: projectDir2,
|
|
13911
|
+
terminal,
|
|
13912
|
+
label: args.label,
|
|
13913
|
+
branch
|
|
13914
|
+
});
|
|
13915
|
+
const lines = [
|
|
13916
|
+
`\u2713 Registered with Conductor`,
|
|
13917
|
+
``,
|
|
13918
|
+
` PID: ${session.pid}`,
|
|
13919
|
+
` Project: ${session.projectDir}`
|
|
13920
|
+
];
|
|
13921
|
+
if (session.branch) lines.push(` Branch: ${session.branch}`);
|
|
13922
|
+
if (session.label) lines.push(` Label: ${session.label}`);
|
|
13923
|
+
if (session.terminal) lines.push(` Terminal: ${session.terminal}`);
|
|
13924
|
+
lines.push(` File: ~/.conductor/sessions/${session.pid}.json`);
|
|
13925
|
+
lines.push(``);
|
|
13926
|
+
lines.push(`This session is now visible in Paradigm Conductor.`);
|
|
13927
|
+
lines.push(`Conductor will auto-discover it via the registration file.`);
|
|
13928
|
+
return { text: lines.join("\n"), handled: true };
|
|
13929
|
+
}
|
|
13930
|
+
case "paradigm_conductor_unregister": {
|
|
13931
|
+
const pid = process.pid;
|
|
13932
|
+
const removed = unregisterConductorSession(pid);
|
|
13933
|
+
if (removed) {
|
|
13934
|
+
return {
|
|
13935
|
+
text: `\u2713 Unregistered from Conductor (PID ${pid}).
|
|
13936
|
+
This session is no longer visible in the Conductor overlay.`,
|
|
13937
|
+
handled: true
|
|
13938
|
+
};
|
|
13939
|
+
} else {
|
|
13940
|
+
return {
|
|
13941
|
+
text: `Session (PID ${pid}) was not registered with Conductor.`,
|
|
13942
|
+
handled: true
|
|
13943
|
+
};
|
|
13944
|
+
}
|
|
13945
|
+
}
|
|
13946
|
+
case "paradigm_conductor_list": {
|
|
13947
|
+
if (args.clean) {
|
|
13948
|
+
const cleaned = cleanStaleSessions();
|
|
13949
|
+
if (cleaned > 0) {
|
|
13950
|
+
}
|
|
13951
|
+
}
|
|
13952
|
+
const sessions = listConductorSessions();
|
|
13953
|
+
if (sessions.length === 0) {
|
|
13954
|
+
return {
|
|
13955
|
+
text: "No sessions registered with Conductor.\nUse paradigm_conductor_register or /conduct to register.",
|
|
13956
|
+
handled: true
|
|
13957
|
+
};
|
|
13958
|
+
}
|
|
13959
|
+
const lines = [`${sessions.length} session(s) registered with Conductor:
|
|
13960
|
+
`];
|
|
13961
|
+
for (const s of sessions) {
|
|
13962
|
+
const parts = [` PID ${s.pid}`];
|
|
13963
|
+
if (s.label) parts.push(`"${s.label}"`);
|
|
13964
|
+
parts.push(`\u2014 ${s.projectDir}`);
|
|
13965
|
+
if (s.branch) parts.push(`(${s.branch})`);
|
|
13966
|
+
lines.push(parts.join(" "));
|
|
13967
|
+
}
|
|
13968
|
+
if (args.clean) {
|
|
13969
|
+
lines.push(`
|
|
13970
|
+
(Stale sessions cleaned)`);
|
|
13971
|
+
}
|
|
13972
|
+
return { text: lines.join("\n"), handled: true };
|
|
13973
|
+
}
|
|
13974
|
+
default:
|
|
13975
|
+
return { text: "", handled: false };
|
|
13976
|
+
}
|
|
13977
|
+
}
|
|
13978
|
+
function detectTerminalBundleId() {
|
|
13979
|
+
try {
|
|
13980
|
+
const script = `
|
|
13981
|
+
tell application "System Events"
|
|
13982
|
+
set frontApp to first application process whose frontmost is true
|
|
13983
|
+
return bundle identifier of frontApp
|
|
13984
|
+
end tell
|
|
13985
|
+
`;
|
|
13986
|
+
const result = execSync5(`osascript -e '${script}'`, {
|
|
13987
|
+
encoding: "utf-8",
|
|
13988
|
+
timeout: 3e3
|
|
13989
|
+
}).trim();
|
|
13990
|
+
return result || void 0;
|
|
13991
|
+
} catch {
|
|
13992
|
+
return void 0;
|
|
13993
|
+
}
|
|
13994
|
+
}
|
|
13995
|
+
|
|
13996
|
+
// ../paradigm-mcp/src/tools/fallback-grep.ts
|
|
13997
|
+
import * as path28 from "path";
|
|
13998
|
+
import { execSync as execSync6 } from "child_process";
|
|
13748
13999
|
function grepForReferences(rootDir, symbol, options = {}) {
|
|
13749
14000
|
const { maxResults = 20 } = options;
|
|
13750
14001
|
const results = [];
|
|
@@ -13758,7 +14009,7 @@ function grepForReferences(rootDir, symbol, options = {}) {
|
|
|
13758
14009
|
let output = "";
|
|
13759
14010
|
for (const cmd of grepCommands) {
|
|
13760
14011
|
try {
|
|
13761
|
-
output =
|
|
14012
|
+
output = execSync6(cmd, { encoding: "utf8", maxBuffer: 1024 * 1024 });
|
|
13762
14013
|
if (output.trim()) break;
|
|
13763
14014
|
} catch {
|
|
13764
14015
|
continue;
|
|
@@ -13772,7 +14023,7 @@ function grepForReferences(rootDir, symbol, options = {}) {
|
|
|
13772
14023
|
const match = line.match(/^(.+?):(\d+):(.*)$/);
|
|
13773
14024
|
if (match) {
|
|
13774
14025
|
const [, filePath, lineNum, content] = match;
|
|
13775
|
-
const relativePath =
|
|
14026
|
+
const relativePath = path28.relative(rootDir, filePath);
|
|
13776
14027
|
let context2 = "unknown";
|
|
13777
14028
|
if (relativePath.includes(".purpose") || relativePath.includes("portal.yaml")) {
|
|
13778
14029
|
context2 = "purpose";
|
|
@@ -14041,6 +14292,8 @@ function registerTools(server, getContext2, reloadContext2) {
|
|
|
14041
14292
|
...getHeatmapToolsList(),
|
|
14042
14293
|
// Pipeline tools
|
|
14043
14294
|
...getPipelineToolsList(),
|
|
14295
|
+
// Conductor session registration tools
|
|
14296
|
+
...getConductorToolsList(),
|
|
14044
14297
|
// Plugin update check
|
|
14045
14298
|
{
|
|
14046
14299
|
name: "paradigm_plugin_check",
|
|
@@ -14431,7 +14684,7 @@ function registerTools(server, getContext2, reloadContext2) {
|
|
|
14431
14684
|
const symbols = getSymbolsByType(ctx.index, type);
|
|
14432
14685
|
examples[type] = symbols.slice(0, 3).map((s) => s.symbol);
|
|
14433
14686
|
}
|
|
14434
|
-
const platform2 =
|
|
14687
|
+
const platform2 = os4.platform();
|
|
14435
14688
|
const isWindows = platform2 === "win32";
|
|
14436
14689
|
const shell = isWindows ? "PowerShell/CMD" : platform2 === "darwin" ? "zsh/bash" : "bash";
|
|
14437
14690
|
let protocols;
|
|
@@ -14671,10 +14924,10 @@ Update command:
|
|
|
14671
14924
|
trackToolCall(noWsText.length, name);
|
|
14672
14925
|
return { content: [{ type: "text", text: noWsText }] };
|
|
14673
14926
|
}
|
|
14674
|
-
const { rebuildStaticFiles: rebuildStaticFiles2 } = await import("./reindex-
|
|
14927
|
+
const { rebuildStaticFiles: rebuildStaticFiles2 } = await import("./reindex-YG3KIXAK.js");
|
|
14675
14928
|
const memberResults = [];
|
|
14676
14929
|
for (const member of ctx.workspace.config.members) {
|
|
14677
|
-
const memberAbsPath =
|
|
14930
|
+
const memberAbsPath = path29.resolve(path29.dirname(ctx.workspace.workspacePath), member.path);
|
|
14678
14931
|
try {
|
|
14679
14932
|
const result = await rebuildStaticFiles2(memberAbsPath);
|
|
14680
14933
|
memberResults.push({
|
|
@@ -14889,6 +15142,15 @@ Update command:
|
|
|
14889
15142
|
};
|
|
14890
15143
|
}
|
|
14891
15144
|
}
|
|
15145
|
+
if (name.startsWith("paradigm_conductor_")) {
|
|
15146
|
+
const result = await handleConductorTool(name, args, ctx);
|
|
15147
|
+
if (result.handled) {
|
|
15148
|
+
trackToolCall(result.text.length, name);
|
|
15149
|
+
return {
|
|
15150
|
+
content: [{ type: "text", text: result.text }]
|
|
15151
|
+
};
|
|
15152
|
+
}
|
|
15153
|
+
}
|
|
14892
15154
|
if (name === "paradigm_reindex") {
|
|
14893
15155
|
const reload = reloadContext2 || (async () => {
|
|
14894
15156
|
});
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
import {
|
|
3
3
|
BackgroundOrchestrator,
|
|
4
4
|
Orchestrator
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ZOH24ZPF.js";
|
|
6
6
|
import "./chunk-6QC3YGB6.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-J26YQVAK.js";
|
|
8
8
|
import "./chunk-PBHIFAL4.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-5SXMV4SP.js";
|
|
10
10
|
import {
|
|
11
11
|
loadAgentsManifest
|
|
12
12
|
} from "./chunk-PMXRGPRQ.js";
|
|
13
|
+
import "./chunk-MW5DMGBB.js";
|
|
13
14
|
import {
|
|
14
15
|
formatCost,
|
|
15
16
|
formatTokens
|
|
@@ -17,7 +18,6 @@ import {
|
|
|
17
18
|
import "./chunk-6P4IFIK2.js";
|
|
18
19
|
import "./chunk-MRENOFTR.js";
|
|
19
20
|
import "./chunk-IRKUEJVW.js";
|
|
20
|
-
import "./chunk-MW5DMGBB.js";
|
|
21
21
|
import "./chunk-ZXMDA7VB.js";
|
|
22
22
|
|
|
23
23
|
// src/commands/team/orchestrate.ts
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
teamInitCommand
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-N6RNYCZD.js";
|
|
5
|
+
import "./chunk-ZOH24ZPF.js";
|
|
6
6
|
import "./chunk-6QC3YGB6.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-J26YQVAK.js";
|
|
8
8
|
import "./chunk-PBHIFAL4.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-5SXMV4SP.js";
|
|
10
10
|
import {
|
|
11
11
|
agentsConfigured
|
|
12
12
|
} from "./chunk-PMXRGPRQ.js";
|
|
@@ -16,16 +16,14 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
detectProjectRole
|
|
18
18
|
} from "./chunk-OXG5GVDJ.js";
|
|
19
|
+
import "./chunk-MW5DMGBB.js";
|
|
19
20
|
import {
|
|
20
21
|
doctorCommand
|
|
21
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-C5ZE6WEX.js";
|
|
22
23
|
import "./chunk-5JGJACDU.js";
|
|
23
24
|
import {
|
|
24
25
|
initCommand
|
|
25
|
-
} from "./chunk-
|
|
26
|
-
import {
|
|
27
|
-
detectDiscipline
|
|
28
|
-
} from "./chunk-CHSHON3O.js";
|
|
26
|
+
} from "./chunk-SCC77UUP.js";
|
|
29
27
|
import {
|
|
30
28
|
indexCommand
|
|
31
29
|
} from "./chunk-W4VFKZVF.js";
|
|
@@ -34,6 +32,9 @@ import "./chunk-6P4IFIK2.js";
|
|
|
34
32
|
import "./chunk-MRENOFTR.js";
|
|
35
33
|
import "./chunk-IRKUEJVW.js";
|
|
36
34
|
import "./chunk-Z7W7HNRG.js";
|
|
35
|
+
import {
|
|
36
|
+
detectDiscipline
|
|
37
|
+
} from "./chunk-UPLDI7CN.js";
|
|
37
38
|
import {
|
|
38
39
|
syncCommand
|
|
39
40
|
} from "./chunk-RP6TZYGE.js";
|
|
@@ -42,7 +43,6 @@ import "./chunk-YO6DVTL7.js";
|
|
|
42
43
|
import {
|
|
43
44
|
log
|
|
44
45
|
} from "./chunk-4NCFWYGG.js";
|
|
45
|
-
import "./chunk-MW5DMGBB.js";
|
|
46
46
|
import "./chunk-ZXMDA7VB.js";
|
|
47
47
|
|
|
48
48
|
// src/commands/shift.ts
|
|
@@ -72,7 +72,8 @@ async function shiftCommand(options = {}) {
|
|
|
72
72
|
force: options.force,
|
|
73
73
|
quick: true,
|
|
74
74
|
// We'll scan separately for better UX
|
|
75
|
-
name: projectName
|
|
75
|
+
name: projectName,
|
|
76
|
+
stack: options.stack
|
|
76
77
|
});
|
|
77
78
|
spinner.succeed(chalk.green("Paradigm initialized"));
|
|
78
79
|
} catch (error) {
|
|
@@ -110,7 +111,8 @@ discipline: ${detected}`
|
|
|
110
111
|
}
|
|
111
112
|
}
|
|
112
113
|
}
|
|
113
|
-
} catch {
|
|
114
|
+
} catch (e) {
|
|
115
|
+
log.operation("shift").debug("Discipline detection failed", { error: e.message });
|
|
114
116
|
}
|
|
115
117
|
}
|
|
116
118
|
}
|
|
@@ -187,7 +189,8 @@ workspace: "${relWsPath}"
|
|
|
187
189
|
}
|
|
188
190
|
console.log(chalk.green(` \u2713 Linked workspace in config.yaml`));
|
|
189
191
|
}
|
|
190
|
-
} catch {
|
|
192
|
+
} catch (e) {
|
|
193
|
+
log.operation("shift").debug("Workspace config link failed", { error: e.message });
|
|
191
194
|
}
|
|
192
195
|
} else if (fs.existsSync(configPath)) {
|
|
193
196
|
try {
|
|
@@ -211,7 +214,8 @@ workspace: "${relPath}"
|
|
|
211
214
|
searchDir = parent;
|
|
212
215
|
}
|
|
213
216
|
}
|
|
214
|
-
} catch {
|
|
217
|
+
} catch (e) {
|
|
218
|
+
log.operation("shift").debug("Workspace auto-detect failed", { error: e.message });
|
|
215
219
|
}
|
|
216
220
|
}
|
|
217
221
|
}
|
|
@@ -259,7 +263,8 @@ workspace: "${relPath}"
|
|
|
259
263
|
spinner.warn(chalk.yellow(`Workspace reindex: ${e.message}`));
|
|
260
264
|
}
|
|
261
265
|
}
|
|
262
|
-
} catch {
|
|
266
|
+
} catch (e) {
|
|
267
|
+
log.operation("shift").debug("Workspace config read failed", { error: e.message });
|
|
263
268
|
}
|
|
264
269
|
}
|
|
265
270
|
}
|
|
@@ -275,7 +280,7 @@ workspace: "${relPath}"
|
|
|
275
280
|
try {
|
|
276
281
|
await syncCommand(ide, { quiet: true, force: true });
|
|
277
282
|
syncResults.push(ide);
|
|
278
|
-
} catch {
|
|
283
|
+
} catch (e) {
|
|
279
284
|
}
|
|
280
285
|
}
|
|
281
286
|
if (syncResults.length > 0) {
|
|
@@ -337,7 +342,8 @@ workspace: "${relPath}"
|
|
|
337
342
|
const wsRelPath = path.relative(cwd, wsAbsPath);
|
|
338
343
|
files.push({ path: wsRelPath, desc: "Multi-project workspace", optional: true });
|
|
339
344
|
}
|
|
340
|
-
} catch {
|
|
345
|
+
} catch (e) {
|
|
346
|
+
log.operation("shift").debug("Summary config read failed", { error: e.message });
|
|
341
347
|
}
|
|
342
348
|
}
|
|
343
349
|
for (const file of files) {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
AgentSpawner
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-J26YQVAK.js";
|
|
5
5
|
import "./chunk-PBHIFAL4.js";
|
|
6
6
|
import {
|
|
7
7
|
getBestProvider
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-5SXMV4SP.js";
|
|
9
9
|
import {
|
|
10
10
|
loadAgentsManifest
|
|
11
11
|
} from "./chunk-PMXRGPRQ.js";
|
|
@@ -8,18 +8,18 @@ import {
|
|
|
8
8
|
teamModelsCommand,
|
|
9
9
|
teamResetCommand,
|
|
10
10
|
teamStatusCommand
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-N6RNYCZD.js";
|
|
12
|
+
import "./chunk-ZOH24ZPF.js";
|
|
13
13
|
import "./chunk-6QC3YGB6.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-J26YQVAK.js";
|
|
15
15
|
import "./chunk-PBHIFAL4.js";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-5SXMV4SP.js";
|
|
17
17
|
import "./chunk-PMXRGPRQ.js";
|
|
18
|
+
import "./chunk-MW5DMGBB.js";
|
|
18
19
|
import "./chunk-5JGJACDU.js";
|
|
19
20
|
import "./chunk-6P4IFIK2.js";
|
|
20
21
|
import "./chunk-MRENOFTR.js";
|
|
21
22
|
import "./chunk-IRKUEJVW.js";
|
|
22
|
-
import "./chunk-MW5DMGBB.js";
|
|
23
23
|
import "./chunk-ZXMDA7VB.js";
|
|
24
24
|
export {
|
|
25
25
|
teamAcceptCommand,
|
|
@@ -48,7 +48,7 @@ async function loreTimelineCommand(options) {
|
|
|
48
48
|
for (const [date, dayEntries] of byDate) {
|
|
49
49
|
grouped[date] = dayEntries.map((e) => ({
|
|
50
50
|
id: e.id,
|
|
51
|
-
type: e.type,
|
|
51
|
+
type: e.type || "note",
|
|
52
52
|
title: e.title,
|
|
53
53
|
author: e.author,
|
|
54
54
|
symbols: e.symbols_touched || []
|
|
@@ -81,10 +81,11 @@ async function loreTimelineCommand(options) {
|
|
|
81
81
|
for (const [date, dayEntries] of byDate) {
|
|
82
82
|
console.log(chalk.white.bold(` ${date}`) + chalk.gray(` (${dayEntries.length} entries)`));
|
|
83
83
|
for (const entry of dayEntries) {
|
|
84
|
-
const
|
|
84
|
+
const entryType = entry.type || "note";
|
|
85
|
+
const colorFn = typeColor[entryType] || chalk.white;
|
|
85
86
|
const time = entry.timestamp.slice(11, 16);
|
|
86
87
|
const authorIcon = entry.agent ? "\u{1F916}" : "\u{1F464}";
|
|
87
|
-
console.log(` ${chalk.gray(time)} ${colorFn(
|
|
88
|
+
console.log(` ${chalk.gray(time)} ${colorFn(entryType.padEnd(14))} ${chalk.white(entry.title)}`);
|
|
88
89
|
console.log(` ${authorIcon} ${chalk.gray(entry.author)} ${(entry.symbols_touched || []).slice(0, 4).map((s) => chalk.cyan(s)).join(" ")}`);
|
|
89
90
|
}
|
|
90
91
|
console.log();
|
|
@@ -47,10 +47,10 @@ components:
|
|
|
47
47
|
references: ["#portal-protocol"]
|
|
48
48
|
|
|
49
49
|
para-101-first-steps:
|
|
50
|
-
description: "First Steps — paradigm init, paradigm shift,
|
|
50
|
+
description: "First Steps — paradigm init, paradigm shift, stack auto-detection, cold start for existing projects"
|
|
51
51
|
file: para-101.json
|
|
52
52
|
tags: [course-content, para-101]
|
|
53
|
-
references: ["#symbol-system", "#purpose-files", "#scan-index"]
|
|
53
|
+
references: ["#symbol-system", "#purpose-files", "#scan-index", "#stack-presets", "#cold-start"]
|
|
54
54
|
|
|
55
55
|
# PARA 201: Architecture (11 lessons)
|
|
56
56
|
|
|
@@ -85,10 +85,10 @@ components:
|
|
|
85
85
|
references: ["#portal-protocol"]
|
|
86
86
|
|
|
87
87
|
para-201-disciplines:
|
|
88
|
-
description: "Disciplines —
|
|
88
|
+
description: "Disciplines and Stack Presets — 14 disciplines, 16 stack presets, auto-detection, framework-specific config"
|
|
89
89
|
file: para-201.json
|
|
90
90
|
tags: [course-content, para-201]
|
|
91
|
-
references: ["#symbol-system"]
|
|
91
|
+
references: ["#symbol-system", "#stack-presets", "#disciplines"]
|
|
92
92
|
|
|
93
93
|
para-201-symbol-naming:
|
|
94
94
|
description: "Symbol Naming — kebab-case, PascalCase, conventions"
|