chainlesschain 0.162.71 → 0.162.73
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/package.json +3 -2
- package/src/assets/web-panel/assets/{AIOps-pes7_jGr.js → AIOps-DTI_-iZ_.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DiHWdeH1.js → ActionButton-CtpbGicW.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-C51UX-V_.js → Analytics-C1HwMd7E.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BE6LJLw9.js → AppLayout-Db953rqB.js} +5 -5
- package/src/assets/web-panel/assets/{Audit-CtTkLTe2.js → Audit-CuIi9Vup.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-lmpVwPxc.js → Backup-DwR7Wlve.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-Dr7DR1E1.js → BaseInput-B5wNMp7S.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DXph6klA.js → Chat-DivalHgk.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-RefrXxqp.js → ChatBubbleRenderer-BwPSr02C.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-BF0aS5R9.js → Checkbox-CJrXPCJH.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-B-oHWNTV.js → Codegen-BieZvOkC.js} +1 -1
- package/src/assets/web-panel/assets/{Col-B6KdyRTE.js → Col-BzvPsQgb.js} +1 -1
- package/src/assets/web-panel/assets/{Community-D5ac0KyO.js → Community-CWcAMlpQ.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-Dc61O2eQ.js → Compact-Bj_BLBpw.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-a48qvNmd.js → Compliance-DKvo0WAi.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CIF9lSRj.js → Cowork-DRajk8JO.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-C_gkf4xd.js → Cron-DPz9MoUo.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CJt15PzW.js → Crosschain-BpSuvmns.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D8I_okEj.js → DID-Co98G00H.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-O4q-qCF2.js → Dashboard-8TSG0W7f.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-flRziiaw.js → Dropdown-CKViu7w3.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CnnkfGPw.js → EmailListRenderer-BqfdADvJ.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CYAJpGqd.js → FamilyGuardDashboard-aWu1imGZ.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-Dm3WqzQ_.js → Federation-w4YpT8EN.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CpAIter6.js → FormItemContext-CAk4CXid.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-ChzXcyuN.js → GenericCardRenderer-MoJw4J2L.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DElmMsL4.js → Git-HNU_a9Jz.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-EWmgn9io.js → Governance-BkIXWYUS.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-VtOR_sef.js → Inference-CnquB88h.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-OMqlGkMR.js → KnowledgeGraph-PGSMF-uq.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CTgYDsTZ.js → Logs-DCc-nYzu.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-DZIUTbn8.js → Marketplace-CyGX8XEt.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DWeOErCA.js → McpTools-DBkZ5yUL.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-DwFBp-ev.js → Memory-DmYLRCwo.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-D42xBfE3.js → MobileBridge-CszJjeNc.js} +2 -2
- package/src/assets/web-panel/assets/{MobileProjects-BHCHauUl.js → MobileProjects-DWgtDsta.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CabnNsyS.js → Mtc-Bmt_Pmg4.js} +3 -3
- package/src/assets/web-panel/assets/{MtcAudit-Ddx9Awu5.js → MtcAudit-BmG0ys0l.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-CJpYBZ8f.js → Multisig-DNd5iMmD.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BvPJskVG.js → NLProgramming-yxbNl09B.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-92ELvJM2.js → Notes-CQ0qAzI4.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CXz0SUzP.js → NotificationSettings-CIzkE4ao.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-4iWRkMr-.js → OrderTableRenderer-e1VMUxTi.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DblqJPeY.js → Organization-BNBIlf_R.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CHfS3HwD.js → Overflow-C5GzzJTq.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DIg0pLIG.js → P2P-DjL2jIED.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BhD3DGjk.js → PdhVaultBrowser-C2EYDmpW.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-Ct7bwrz8.js → Permissions-BVGCXxDp.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-DG9c1eas.js → PersonalDataHub-B1xBro16.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-BwQnEqG0.js → Pipeline-DIYWiDnt.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BvWaf-Ba.js → Privacy--Qx3QdO1.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BFzMHtiW.js → ProjectInit-DYOEcV04.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-DDpokSpH.js → ProjectSettings-BcOx5-KS.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-3IL8lyPl.js → Projects-CO69txk4.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-C6BsEzSR.js → Providers-Bj8pCgzo.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Mh6690Ey.js → QuickAsk-Cukpq-4s.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CJbZ6wgA.js → Recommend-DJB5wUfM.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-GDcyl6iQ.js → Reputation-B9t0-nT0.js} +1 -1
- package/src/assets/web-panel/assets/{Row-6p4DKFSi.js → Row-4cniRgxC.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BLhrkoDq.js → RssFeed-Y4db_T9t.js} +3 -3
- package/src/assets/web-panel/assets/{Search-Ckiyt35t.js → Search-DggZDzlc.js} +1 -1
- package/src/assets/web-panel/assets/{Security-qhh-B5Qt.js → Security-C67A6kED.js} +4 -4
- package/src/assets/web-panel/assets/{Services-D7a2OwKm.js → Services-BocBjvaa.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CSMxupKd.js → Skeleton-C9jI-iOy.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CGpMng8w.js → Skills-2baFHKOW.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CYtaU3Ar.js → Sla-CnowXeRb.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BTCsu1uM.js → SpeechSettings-DWGBkmUt.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Cnzx2L5I.js → SyncSettings-B89qwCgX.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-C1_WvNc0.js +1 -0
- package/src/assets/web-panel/assets/{Templates-Ccdx_C3w.js → Templates-P8dBhbxa.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-ZN8c86j3.js → Tenant-DHo0pxrm.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-Dr-HvjH-.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-CjgirE9d.js → TimelineRenderer-DM7dOaUR.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-QoRpi6Wf.js → Tokens-DnJxqOPM.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CEQKJkhs.js → Trigger-C-FLgMzr.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-UTuAzV1q.js → Trust-CIT_RVqA.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-JDs9I7fl.js → UkeySign-Cg9VS6y6.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BACYQQSd.js → VideoEditing-BzoxE8mA.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-C-SKluhH.js → Wallet-ZkmCII8R.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-9chizTFy.js → WebAuthn-CptQdp3u.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-0mF-LAUo.js → WorkflowEditor-Vkz28khO.js} +1 -1
- package/src/assets/web-panel/assets/{chat-Di7QINiP.js → chat-DXdmvvEA.js} +1 -1
- package/src/assets/web-panel/assets/{colors-SBmhHMM9.js → colors-De7FCj5l.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BmbETbNj.js → compact-item-DnT3XzME.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-C7hFnsJ7.js → createContext-ECZfCCqd.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-gaA8VqZf.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CFtthKDD.js → hasIn-Uodg6pAt.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRBc1Ewn.js → index-1dWvOqru.js} +1 -1
- package/src/assets/web-panel/assets/{index-WjZVyLn7.js → index-BC8SOuGi.js} +1 -1
- package/src/assets/web-panel/assets/{index-CovTrPpI.js → index-BUMNJRCl.js} +1 -1
- package/src/assets/web-panel/assets/{index-CSnTUPQx.js → index-Bg1RsfAJ.js} +3 -3
- package/src/assets/web-panel/assets/{index-NxxQTlPJ.js → index-Blo85ZKd.js} +1 -1
- package/src/assets/web-panel/assets/{index-ClIp4Vin.js → index-BtJ8BHU0.js} +1 -1
- package/src/assets/web-panel/assets/{index-B4etIqbf.js → index-C01WM7Pk.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWfObC0n.js → index-C4KhsGXo.js} +1 -1
- package/src/assets/web-panel/assets/{index-sz0w-D-C.js → index-C6JgjkY7.js} +1 -1
- package/src/assets/web-panel/assets/{index-lRVjtXeH.js → index-C9_Cnvha.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCcCs7LJ.js → index-CCguvASR.js} +1 -1
- package/src/assets/web-panel/assets/{index-C6tZzsb9.js → index-CLzPxAp4.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0yO3vWh.js → index-CMuqxCVw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcawAm_i.js → index-COTabJQd.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cib-RTws.js → index-CPjI3AGE.js} +1 -1
- package/src/assets/web-panel/assets/{index-C07kpleB.js → index-CaDZ-LMg.js} +1 -1
- package/src/assets/web-panel/assets/{index-DEYnWiq1.js → index-CbbfcGeJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgXQwqXr.js → index-CcLDjTgI.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2CN7coN.js → index-CffZBdA1.js} +1 -1
- package/src/assets/web-panel/assets/{index-PN02VlUB.js → index-CwXP0KcT.js} +1 -1
- package/src/assets/web-panel/assets/{index-_hO8-EnW.js → index-D2YOclGO.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dk4ez5rf.js → index-DBsl2SuZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6vNUp6c.js → index-DCvmjxu9.js} +1 -1
- package/src/assets/web-panel/assets/{index-sA4vr5WV.js → index-DGwgEqwl.js} +1 -1
- package/src/assets/web-panel/assets/{index-DI2xH1fU.js → index-DOIeo8Qs.js} +1 -1
- package/src/assets/web-panel/assets/{index-_a2NG3iP.js → index-DPcpxSQt.js} +1 -1
- package/src/assets/web-panel/assets/index-DTpmiTGK.js +1 -0
- package/src/assets/web-panel/assets/{index-CWDk3nDZ.js → index-Db33l8Ix.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNpb8m5a.js → index-Dbfj4QL5.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dww6gCzI.js → index-Dd9Bx3tJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bpo7UVJe.js → index-Dkvf5upf.js} +1 -1
- package/src/assets/web-panel/assets/index-DwpvMYUU.js +1 -0
- package/src/assets/web-panel/assets/{index-BT2uOwmA.js → index-Dy0AT-uc.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2fhXmhW.js → index-FU8Zo5cp.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcRTX_WO.js → index-JVwNC4yP.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dps9xdE8.js → index-JqSxr1A7.js} +1 -1
- package/src/assets/web-panel/assets/{index-D134XFWR.js → index-KV6dXwKC.js} +1 -1
- package/src/assets/web-panel/assets/{index-D8CeUlN0.js → index-LwNszM-5.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcBhsVYn.js → index-cHnmjGqB.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-B1zCwkvT.js → initDefaultProps-B3H1sf95.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BDGIV9KA.js → motion-DreYO5eb.js} +1 -1
- package/src/assets/web-panel/assets/{move-BITqgluK.js → move-B0OVU04M.js} +1 -1
- package/src/assets/web-panel/assets/{omit-uD97QKBF.js → omit-PcEEXHLZ.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CZpXhSIE.js → pickAttrs-DH6-hDkF.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-ByUvT_08.js → placementArrow-DFamUSEw.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BQG9LlBs.js → responsiveObserve-DT1grAyh.js} +1 -1
- package/src/assets/web-panel/assets/{slide-Bx9TyeEE.js → slide-41lCsY6d.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-XWaMqYM8.js → statusUtils-FzJ7j2T7.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BZ-nMyDB.js → styleChecker-D0Zvn50h.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-D_iwA3vx.js → useFlexGapSupport-BTxsJE5n.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DuvW_aRX.js → useFs-DRVttEr3.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BO7orS0d.js → usePersonalDataHub-BSe7NVv0.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-Cc_fqAL4.js → vnode-D8O7tUXh.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BGkBp90M.js → zoom-CMQc1RZ4.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agent.js +12 -0
- package/src/commands/cowork.js +8 -0
- package/src/commands/crosschain.js +32 -4
- package/src/commands/init.js +10 -10
- package/src/commands/loop.js +9 -3
- package/src/commands/memory.js +6 -4
- package/src/commands/orchestrate.js +5 -2
- package/src/commands/video.js +5 -1
- package/src/lib/agents.js +16 -5
- package/src/lib/cowork-workflow.js +357 -136
- package/src/lib/micro-compact.js +52 -0
- package/src/lib/output-styles.js +41 -7
- package/src/lib/permission-rules.cjs +39 -0
- package/src/lib/project-root.cjs +87 -0
- package/src/lib/settings-hooks.cjs +18 -6
- package/src/lib/settings-loader.cjs +12 -5
- package/src/lib/skill-loader.js +62 -43
- package/src/lib/slash-commands.js +18 -2
- package/src/repl/agent-repl.js +228 -20
- package/src/repl/chat-repl.js +4 -2
- package/src/repl/permission-tier.js +60 -0
- package/src/repl/stream-decision.js +16 -0
- package/src/repl/think-command.js +36 -0
- package/src/runtime/agent-core.js +67 -10
- package/src/runtime/file-ref-expander.js +209 -18
- package/src/runtime/headless-runner.js +3 -3
- package/src/runtime/headless-stream.js +16 -3
- package/src/runtime/mcp-config.js +78 -1
- package/src/assets/web-panel/assets/Tasks-BhnGtqaZ.js +0 -1
- package/src/assets/web-panel/assets/Terminal-BfgM0oyN.js +0 -3
- package/src/assets/web-panel/assets/devWarning-gNvbyy4j.js +0 -1
- package/src/assets/web-panel/assets/index-BNXpMnIY.js +0 -1
- package/src/assets/web-panel/assets/index-gfHxqT1Q.js +0 -1
package/src/commands/loop.js
CHANGED
|
@@ -73,20 +73,26 @@ function spawnIteration(cmd, args, { shell, onChild, capture }) {
|
|
|
73
73
|
});
|
|
74
74
|
if (onChild) onChild(child);
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
const outChunks = [];
|
|
77
77
|
if (capture) {
|
|
78
78
|
child.stdout?.on("data", (d) => {
|
|
79
|
-
|
|
79
|
+
outChunks.push(d);
|
|
80
80
|
process.stdout.write(d);
|
|
81
81
|
});
|
|
82
82
|
child.stderr?.on("data", (d) => {
|
|
83
|
-
|
|
83
|
+
outChunks.push(d);
|
|
84
84
|
process.stderr.write(d);
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
// `close` (not `exit`) so piped stdio is fully drained before we resolve.
|
|
89
89
|
child.on("close", (code, signal) => {
|
|
90
|
+
// Decode the captured bytes once, at the end. Accumulating with
|
|
91
|
+
// `output += chunk` would decode each stdout chunk independently, so a
|
|
92
|
+
// multi-byte UTF-8 character split across a chunk boundary corrupts the
|
|
93
|
+
// captured string that `--until <regex>` / `--dynamic` directive parsing
|
|
94
|
+
// reads. (The raw passthrough writes above are unaffected.)
|
|
95
|
+
const output = Buffer.concat(outChunks).toString("utf-8");
|
|
90
96
|
resolve({ exitCode: code == null ? null : code, output, signal });
|
|
91
97
|
});
|
|
92
98
|
child.on("error", (err) => {
|
package/src/commands/memory.js
CHANGED
|
@@ -63,9 +63,8 @@ export function registerMemoryCommand(program) {
|
|
|
63
63
|
.option("--json", "Output as JSON")
|
|
64
64
|
.action(async (options) => {
|
|
65
65
|
try {
|
|
66
|
-
const { loadProjectInstructions } =
|
|
67
|
-
"../lib/project-instructions.js"
|
|
68
|
-
);
|
|
66
|
+
const { loadProjectInstructions } =
|
|
67
|
+
await import("../lib/project-instructions.js");
|
|
69
68
|
const cwd = options.cwd || process.cwd();
|
|
70
69
|
const loaded = loadProjectInstructions({ cwd });
|
|
71
70
|
if (options.json) {
|
|
@@ -519,7 +518,10 @@ export function registerMemoryCommand(program) {
|
|
|
519
518
|
|
|
520
519
|
if (options.edit) {
|
|
521
520
|
const { execSync } = await import("child_process");
|
|
522
|
-
const editor =
|
|
521
|
+
const editor =
|
|
522
|
+
process.env.EDITOR ||
|
|
523
|
+
process.env.VISUAL ||
|
|
524
|
+
(process.platform === "win32" ? "notepad" : "nano");
|
|
523
525
|
const filePath = `${memoryDir}/MEMORY.md`;
|
|
524
526
|
try {
|
|
525
527
|
execSync(`${editor} "${filePath}"`, { stdio: "inherit" });
|
|
@@ -521,9 +521,12 @@ async function _webhookMode(cwd, options) {
|
|
|
521
521
|
return;
|
|
522
522
|
}
|
|
523
523
|
|
|
524
|
-
|
|
525
|
-
req.on("data", (chunk) => (
|
|
524
|
+
const bodyChunks = [];
|
|
525
|
+
req.on("data", (chunk) => bodyChunks.push(chunk));
|
|
526
526
|
req.on("end", async () => {
|
|
527
|
+
// Decode once: per-chunk toString() would corrupt a multi-byte UTF-8
|
|
528
|
+
// char (e.g. Chinese IM webhook text) split across a chunk boundary.
|
|
529
|
+
const body = Buffer.concat(bodyChunks).toString("utf-8");
|
|
527
530
|
let taskText = null;
|
|
528
531
|
let source = TASK_SOURCE.CLI;
|
|
529
532
|
|
package/src/commands/video.js
CHANGED
|
@@ -281,6 +281,7 @@ export function registerVideoCommand(program) {
|
|
|
281
281
|
.action(async (action, options) => {
|
|
282
282
|
const { promises: fs } = await import("fs");
|
|
283
283
|
const pathMod = await import("path");
|
|
284
|
+
const osMod = await import("os");
|
|
284
285
|
|
|
285
286
|
const base = process.env.APPDATA
|
|
286
287
|
? pathMod.join(
|
|
@@ -290,7 +291,10 @@ export function registerVideoCommand(program) {
|
|
|
290
291
|
"video-editing",
|
|
291
292
|
)
|
|
292
293
|
: pathMod.join(
|
|
293
|
-
|
|
294
|
+
// os.homedir() resolves the real home on every platform; the old
|
|
295
|
+
// `process.env.HOME || "~"` left a literal "~" on Windows (HOME
|
|
296
|
+
// often unset there) which fs can't resolve.
|
|
297
|
+
osMod.homedir(),
|
|
294
298
|
".chainlesschain",
|
|
295
299
|
"video-editing",
|
|
296
300
|
);
|
package/src/lib/agents.js
CHANGED
|
@@ -21,6 +21,7 @@ import fsDefault from "node:fs";
|
|
|
21
21
|
import pathDefault from "node:path";
|
|
22
22
|
import { homedir } from "node:os";
|
|
23
23
|
import yaml from "js-yaml";
|
|
24
|
+
import { projectRootBase } from "./project-root.cjs";
|
|
24
25
|
|
|
25
26
|
const _deps = { fs: fsDefault, path: pathDefault };
|
|
26
27
|
|
|
@@ -46,26 +47,36 @@ function parseFrontmatter(content) {
|
|
|
46
47
|
/** Normalize `tools` (comma string | array | null) into a string[] or null. */
|
|
47
48
|
export function normalizeTools(tools) {
|
|
48
49
|
if (tools == null) return null;
|
|
49
|
-
const list = Array.isArray(tools)
|
|
50
|
-
? tools
|
|
51
|
-
: String(tools).split(/[,\s]+/);
|
|
50
|
+
const list = Array.isArray(tools) ? tools : String(tools).split(/[,\s]+/);
|
|
52
51
|
const out = list.map((t) => String(t).trim()).filter(Boolean);
|
|
53
52
|
return out.length > 0 ? out : null;
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
/** Directories scanned for agent files — project first (shadows personal). */
|
|
57
56
|
export function agentDirs(cwd = process.cwd(), opts = {}) {
|
|
57
|
+
const fs = opts.deps?.fs || _deps.fs;
|
|
58
58
|
const path = opts.deps?.path || _deps.path;
|
|
59
59
|
const home = opts.home || homedir();
|
|
60
60
|
// Project-native first (highest precedence), then the Claude-Code-portable
|
|
61
61
|
// location (so existing `.claude/agents/*.md` work unchanged), then personal.
|
|
62
62
|
// discoverAgents reverses + last-write-wins, so `.chainlesschain/agents/`
|
|
63
63
|
// shadows `.claude/agents/` shadows `~/.claude/agents/` on a name clash.
|
|
64
|
-
|
|
64
|
+
const dirs = [
|
|
65
65
|
{ dir: path.join(cwd, ".chainlesschain", "agents"), scope: "project" },
|
|
66
66
|
{ dir: path.join(cwd, ".claude", "agents"), scope: "project" },
|
|
67
|
-
{ dir: path.join(home, ".claude", "agents"), scope: "personal" },
|
|
68
67
|
];
|
|
68
|
+
// Subdirectory run: also scan the project-root `.claude` (cwd stays closest
|
|
69
|
+
// and wins on a name clash through the reverse + last-write-wins below).
|
|
70
|
+
const root = projectRootBase(cwd, { fs, path });
|
|
71
|
+
if (root) {
|
|
72
|
+
dirs.push({
|
|
73
|
+
dir: path.join(root, ".chainlesschain", "agents"),
|
|
74
|
+
scope: "project",
|
|
75
|
+
});
|
|
76
|
+
dirs.push({ dir: path.join(root, ".claude", "agents"), scope: "project" });
|
|
77
|
+
}
|
|
78
|
+
dirs.push({ dir: path.join(home, ".claude", "agents"), scope: "personal" });
|
|
79
|
+
return dirs;
|
|
69
80
|
}
|
|
70
81
|
|
|
71
82
|
/** Recursively collect `*.md` files under `dir` as `{file, rel}` (rel uses /). */
|