@rubytech/create-maxy-code 0.1.39 → 0.1.40
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/index.js +35 -101
- package/dist/uninstall.js +11 -102
- package/package.json +1 -1
- package/payload/platform/plugins/docs/references/deployment.md +7 -3
- package/payload/platform/plugins/docs/references/platform.md +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.js +6 -1
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/hooks-discovery.d.ts +7 -0
- package/payload/platform/services/claude-session-manager/dist/hooks-discovery.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/hooks-discovery.js +90 -0
- package/payload/platform/services/claude-session-manager/dist/hooks-discovery.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +62 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +22 -2
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +3 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +10 -3
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +54 -0
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js +111 -0
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +4 -2
- package/payload/platform/templates/agents/admin/SOUL.md +8 -14
- package/payload/server/{chunk-NNHHGQJL.js → chunk-4P2MPERV.js} +6 -163
- package/payload/server/{chunk-3G6JMV7N.js → chunk-MEGIQYUD.js} +1 -1
- package/payload/server/{chunk-QC5LHYPH.js → chunk-XJVJ2B2Q.js} +1 -1
- package/payload/server/{cloudflare-task-tracker-NEB3X6O2.js → cloudflare-task-tracker-R6MMORFU.js} +2 -2
- package/payload/server/maxy-edge.js +2 -2
- package/payload/server/public/assets/{Checkbox-CmCjmfJy.js → Checkbox-6lLDKzMP.js} +1 -1
- package/payload/server/public/assets/{admin-CtodW6As.js → admin-DO9W2D9g.js} +1 -1
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CfOjbx0H.js → architectureDiagram-Q4EWVU46-BbLtk_k6.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-D0kA2C9i.js → blockDiagram-DXYQGD6D-B9IgcgeJ.js} +1 -1
- package/payload/server/public/assets/{brand-6hKfBgOI.css → brand-DQrOw38P.css} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CDgXiXgj.js → c4Diagram-AHTNJAMY-BrvPS09f.js} +1 -1
- package/payload/server/public/assets/channel-Bmc1qlCD.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-BfBTcT5X.js → chunk-336JU56O-DXOr0ZnC.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-BdSSZ1Kw.js → chunk-426QAEUC-BFW4zwrV.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-UvE1im9g.js → chunk-4TB4RGXK-D7_xc8xf.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-Dx4DslXz.js → chunk-5FUZZQ4R-CdCSpb8j.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-CNHawhLJ.js → chunk-5PVQY5BW-BVgnD9QR.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-Rmjv-1et.js → chunk-EDXVE4YY-CYrT1Tom.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-CL-LeH3r.js → chunk-ENJZ2VHE-B70d0jN7.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-B2MFOJDt.js → chunk-ICPOFSXX-BcLouRbd.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-BxcIcCt5.js → chunk-OYMX7WX6-C2ja2fPj.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-COzwOBrY.js → chunk-U2HBQHQK-CCjoTpL6.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-B0rjT5hL.js → chunk-X2U36JSP-QIVkp-XR.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-pwrIw0XH.js → chunk-YZCP3GAM-qD9rebhx.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-BXpeAm0k.js → chunk-ZZ45TVLE-C0J_f05H.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-RVZorqSk.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BEZem5bl.js +1 -0
- package/payload/server/public/assets/clone-B6eXIhiR.js +1 -0
- package/payload/server/public/assets/{dagre-DjOJn05k.js → dagre-B3cA7jId.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-PczvQiEh.js → dagre-KV5264BT-C8lVFO5U.js} +1 -1
- package/payload/server/public/assets/data-BaSmBQ7U.js +1 -0
- package/payload/server/public/assets/{device-url-actions-C55ZS_Zg.js → device-url-actions-qu2-XiHc.js} +1 -1
- package/payload/server/public/assets/{diagram-5BDNPKRD-D477xo5F.js → diagram-5BDNPKRD-BYkcTelK.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-C-HAtbtT.js → diagram-G4DWMVQ6-B6f_WR4j.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-B9wus4H0.js → diagram-MMDJMWI5-ALaKcN6w.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-UMZLloFr.js → diagram-TYMM5635-CkVg3crF.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-B8E52Mp4.js → erDiagram-SMLLAGMA-DszlTGIQ.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-CUel34tq.js → flowDiagram-DWJPFMVM-C9-FqSlk.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BfwE-Xav.js → ganttDiagram-T4ZO3ILL-faJU-5Zy.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-2d6tXRIM.js → gitGraphDiagram-UUTBAWPF-Cck8_tiG.js} +1 -1
- package/payload/server/public/assets/{graph-labels-Bg2Bzelb.js → graph-labels-COhLbJD0.js} +1 -1
- package/payload/server/public/assets/graph-qg6fkRyC.js +1 -0
- package/payload/server/public/assets/{graphlib-CCo9-wNJ.js → graphlib-CYRxeBXj.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-DB1SVWL6.js → infoDiagram-42DDH7IO-CLjEjhJX.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-CdeMUTYS.js → ishikawaDiagram-UXIWVN3A-nSIaVXdw.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-D8x8TUoc.js → journeyDiagram-VCZTEJTY-DuKq7d3g.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Cmkhd1mO.js → kanban-definition-6JOO6SKY-Bt5xqHfY.js} +1 -1
- package/payload/server/public/assets/{line-CoHkpBv3.js → line-BgV8qCP_.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-C7R2PfZC.js → mermaid-parser.core-DQzl__pY.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-lQaq-kll.js → mermaid.core-BAPEOjwh.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CsPq3pX1.js → mindmap-definition-QFDTVHPH-CmMBrI79.js} +1 -1
- package/payload/server/public/assets/{page-DwEaAdVp.js → page-BoDdtGsH.js} +1 -1
- package/payload/server/public/assets/{page-CBKzjUHO.js → page-D_NCNi5j.js} +1 -1
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-FZH9sTnP.js → pieDiagram-DEJITSTG-BhsR9k6j.js} +1 -1
- package/payload/server/public/assets/{public-hGLzxhE_.js → public-DCcGKIMW.js} +4 -4
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-9poxfoqh.js → quadrantDiagram-34T5L4WZ-DSKV6d_A.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-Ce7iOdT_.js → requirementDiagram-MS252O5E-BccM48AI.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-DINuXatI.js → sankeyDiagram-XADWPNL6-C0pxiQfn.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-CSMec3EK.js → sequenceDiagram-FGHM5R23-BVsUIJsW.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-15DKzypj.js → stateDiagram-FHFEXIEX-lqYQZ-F1.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-D2eHThhC.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BxIRc9Pu.js → timeline-definition-GMOUNBTQ-D-LxYOHq.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-DdgRyU55.js → vennDiagram-DHZGUBPP-BNHzvNba.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-CKvhU1Uj.js → wardleyDiagram-NUSXRM2D-BfXR9l5s.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-d0V1V4PD.js → xychartDiagram-5P7HB3ND-CL7mVEbT.js} +1 -1
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +8 -8
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +981 -859
- package/payload/server/public/assets/channel-DA7MGMzQ.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-DqfmcWSr.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BVOMSbZ_.js +0 -1
- package/payload/server/public/assets/clone-Byp7hagU.js +0 -1
- package/payload/server/public/assets/data-A7azIkZU.js +0 -1
- package/payload/server/public/assets/graph-Dx83EhtP.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-AcaK_QfD.js +0 -1
- /package/payload/server/public/assets/{brand-DXOx08r0.js → brand-Bky-hMVw.js} +0 -0
package/dist/index.js
CHANGED
|
@@ -1597,9 +1597,8 @@ function provisionRemoteSessionSecret() {
|
|
|
1597
1597
|
// install-time admin-auth invariant. Walks every account.json
|
|
1598
1598
|
// under accountsDir and compares its admins[] to the persistent users.json,
|
|
1599
1599
|
// emitting one [install-invariant] line per divergence and one summary line.
|
|
1600
|
-
// Log-only (no install abort)
|
|
1601
|
-
//
|
|
1602
|
-
// the deployed fleet is audited clean. Mirror of
|
|
1600
|
+
// Log-only (no install abort); future sprint can promote to refuse-or-degrade
|
|
1601
|
+
// once the deployed fleet is audited clean. Mirror of
|
|
1603
1602
|
// checkAdminAuthInvariant() in platform/lib/admins-write/src/index.ts.
|
|
1604
1603
|
function runInstallInvariantCheck(usersFile, accountsDir) {
|
|
1605
1604
|
const TAG = "[install-invariant]";
|
|
@@ -1686,71 +1685,23 @@ function deployPayload() {
|
|
|
1686
1685
|
// Persistent config lives at ~/{configDir}/ — survives rm -rf ~/{installDir}
|
|
1687
1686
|
const persistentDir = resolve(process.env.HOME ?? "/root", BRAND.configDir);
|
|
1688
1687
|
const persistentPasswordFile = join(persistentDir, ".neo4j-password");
|
|
1689
|
-
const persistentAccountsDir = join(persistentDir, "accounts");
|
|
1690
1688
|
// Migrate: if password is in old location, move to persistent
|
|
1691
1689
|
const oldPasswordFile = join(INSTALL_DIR, "platform/config/.neo4j-password");
|
|
1692
1690
|
if (existsSync(oldPasswordFile) && !existsSync(persistentPasswordFile)) {
|
|
1693
1691
|
mkdirSync(persistentDir, { recursive: true });
|
|
1694
1692
|
cpSync(oldPasswordFile, persistentPasswordFile);
|
|
1695
1693
|
}
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
mkdirSync(persistentDir, { recursive: true });
|
|
1699
|
-
cpSync(oldAccountsDir, persistentAccountsDir, { recursive: true });
|
|
1700
|
-
}
|
|
1701
|
-
// users.json lives at <persistentDir>/users.json. earlier
|
|
1702
|
-
// installs wrote to <INSTALL_DIR>/platform/config/users.json (the wipe zone)
|
|
1703
|
-
// and relied on a one-shot copy-up at first install plus a copy-back after
|
|
1704
|
-
// every wipe. The copy-back overwrote LIVE with the FROZEN-AT-FIRST-INSTALL
|
|
1705
|
-
// backup, dropping every admin row added since first install. Writers (paths.ts,
|
|
1706
|
-
// admin-add, set-pin, seed-neo4j.sh, migrate-import.sh) now target the
|
|
1694
|
+
// users.json lives at <persistentDir>/users.json. Writers (paths.ts,
|
|
1695
|
+
// admin-add, set-pin, seed-neo4j.sh, migrate-import.sh) target the
|
|
1707
1696
|
// persistent file directly — see comment in platform/ui/app/lib/paths.ts.
|
|
1708
|
-
//
|
|
1709
|
-
// Legacy pickup: if a pre-Task-904 install left users.json inside the wipe
|
|
1710
|
-
// zone, copy it up once. Idempotent — guarded by !existsSync(persistentUsersFile).
|
|
1711
|
-
// Safe to delete this block one release has been deployed
|
|
1712
|
-
// everywhere; until then it absorbs upgrades from any pre-Task-904 version.
|
|
1713
1697
|
const persistentUsersFile = join(persistentDir, "users.json");
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
}
|
|
1720
|
-
// Claude Code OAuth credentials legacy pickup. earlier
|
|
1721
|
-
// installs shared `~/.claude/.credentials.json` across brands; the brand
|
|
1722
|
-
// main service's `claude` SDK subprocess and admin server now read from
|
|
1723
|
-
// `${persistDir}/.claude/.credentials.json` per the new
|
|
1724
|
-
// Environment=CLAUDE_CONFIG_DIR= block in port-resolution.ts.
|
|
1725
|
-
//
|
|
1726
|
-
// Move-semantics: the FIRST brand to install grabs the legacy file. The
|
|
1727
|
-
// operation is cpSync + unlinkSync (not renameSync) so it survives cross-
|
|
1728
|
-
// volume `~/` mounts that would EXDEV-fail rename. Subsequent brand
|
|
1729
|
-
// installs find no legacy file and require a fresh `claude /login`.
|
|
1730
|
-
//
|
|
1731
|
-
// Idempotency stamp at `${persistentDir}/.claude/.credentials-migrated`
|
|
1732
|
-
// prevents re-pickup on re-installs of the same brand even if an operator
|
|
1733
|
-
// later runs `claude /login` with no CLAUDE_CONFIG_DIR set, which would
|
|
1734
|
-
// re-create the legacy path.
|
|
1698
|
+
// Claude Code OAuth credentials live at
|
|
1699
|
+
// `${persistDir}/.claude/.credentials.json`. The brand main service's
|
|
1700
|
+
// `claude` SDK subprocess and admin server read from there via the
|
|
1701
|
+
// Environment=CLAUDE_CONFIG_DIR= block in port-resolution.ts. Fresh
|
|
1702
|
+
// installs prompt the operator to run `claude /login`.
|
|
1735
1703
|
const persistentClaudeDir = join(persistentDir, ".claude");
|
|
1736
|
-
|
|
1737
|
-
const legacyCredsFile = join(process.env.HOME ?? "/root", ".claude", ".credentials.json");
|
|
1738
|
-
const credsMigratedStamp = join(persistentClaudeDir, ".credentials-migrated");
|
|
1739
|
-
if (!existsSync(credsMigratedStamp)) {
|
|
1740
|
-
mkdirSync(persistentClaudeDir, { recursive: true });
|
|
1741
|
-
if (existsSync(legacyCredsFile) && !existsSync(persistentCredsFile)) {
|
|
1742
|
-
cpSync(legacyCredsFile, persistentCredsFile);
|
|
1743
|
-
try {
|
|
1744
|
-
unlinkSync(legacyCredsFile);
|
|
1745
|
-
}
|
|
1746
|
-
catch (err) {
|
|
1747
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
1748
|
-
console.log(` [install] claude-creds pickup: legacy unlink warn=${msg}`);
|
|
1749
|
-
}
|
|
1750
|
-
console.log(` [install] claude-creds pickup: brand=${BRAND.hostname} source=${legacyCredsFile} target=${persistentCredsFile}`);
|
|
1751
|
-
}
|
|
1752
|
-
writeFileSync(credsMigratedStamp, new Date().toISOString() + "\n");
|
|
1753
|
-
}
|
|
1704
|
+
mkdirSync(persistentClaudeDir, { recursive: true });
|
|
1754
1705
|
// pre-populate the brand `.claude.json` so the manager's
|
|
1755
1706
|
// PTY-spawned `claude --verbose --remote-control` boots straight into the
|
|
1756
1707
|
// session URL without stopping at the first-run theme picker or the
|
|
@@ -1813,31 +1764,9 @@ function deployPayload() {
|
|
|
1813
1764
|
spawnSync("sleep", ["1"]);
|
|
1814
1765
|
}
|
|
1815
1766
|
}
|
|
1816
|
-
//
|
|
1817
|
-
//
|
|
1818
|
-
|
|
1819
|
-
const dataDir = join(INSTALL_DIR, "data");
|
|
1820
|
-
const dataAccountsDir = join(dataDir, "accounts");
|
|
1821
|
-
const dataUploadsDir = join(dataDir, "uploads");
|
|
1822
|
-
const oldLiveAccounts = join(INSTALL_DIR, "platform/config/accounts");
|
|
1823
|
-
if (!existsSync(dataAccountsDir)) {
|
|
1824
|
-
if (existsSync(oldLiveAccounts)) {
|
|
1825
|
-
mkdirSync(dataDir, { recursive: true });
|
|
1826
|
-
cpSync(oldLiveAccounts, dataAccountsDir, { recursive: true });
|
|
1827
|
-
console.log(" Migrated accounts to data/.");
|
|
1828
|
-
}
|
|
1829
|
-
else if (existsSync(persistentAccountsDir)) {
|
|
1830
|
-
mkdirSync(dataDir, { recursive: true });
|
|
1831
|
-
cpSync(persistentAccountsDir, dataAccountsDir, { recursive: true });
|
|
1832
|
-
console.log(" Restored accounts from persistent backup to data/.");
|
|
1833
|
-
}
|
|
1834
|
-
}
|
|
1835
|
-
const oldLiveUploads = join(INSTALL_DIR, "platform/data/attachments");
|
|
1836
|
-
if (!existsSync(dataUploadsDir) && existsSync(oldLiveUploads)) {
|
|
1837
|
-
mkdirSync(dataDir, { recursive: true });
|
|
1838
|
-
cpSync(oldLiveUploads, dataUploadsDir, { recursive: true });
|
|
1839
|
-
console.log(" Migrated uploads to data/.");
|
|
1840
|
-
}
|
|
1767
|
+
// User data lives at {installDir}/data/ — outside the platform/ wipe zone.
|
|
1768
|
+
// Install path creates this fresh; runtime writers populate it on demand.
|
|
1769
|
+
mkdirSync(join(INSTALL_DIR, "data"), { recursive: true });
|
|
1841
1770
|
// Wipe deployment directories to prevent stale files.
|
|
1842
1771
|
// data/ is NOT wiped — it contains user data (accounts, uploads) that must survive.
|
|
1843
1772
|
for (const dir of ["platform", "server", "maxy", "premium-plugins", "docs", ".claude"]) {
|
|
@@ -1862,11 +1791,9 @@ function deployPayload() {
|
|
|
1862
1791
|
// users.json is read directly from persistentDir by both
|
|
1863
1792
|
// platform/ui/app/lib/paths.ts (USERS_FILE = MAXY_DIR/users.json) and the
|
|
1864
1793
|
// admin MCP plugin (USERS_FILE = CONFIG_DIR/users.json). No copy into the
|
|
1865
|
-
// wipe zone
|
|
1866
|
-
//
|
|
1867
|
-
//
|
|
1868
|
-
// detectable in the install log without any runtime change (singular
|
|
1869
|
-
// "userId preserved" hid the multi-row failure mode).
|
|
1794
|
+
// wipe zone. The line below observes the row count + userId prefixes so a
|
|
1795
|
+
// future regression is grep-detectable in the install log without any
|
|
1796
|
+
// runtime change.
|
|
1870
1797
|
if (existsSync(persistentUsersFile)) {
|
|
1871
1798
|
try {
|
|
1872
1799
|
const raw = readFileSync(persistentUsersFile, "utf-8").trim();
|
|
@@ -1886,8 +1813,7 @@ function deployPayload() {
|
|
|
1886
1813
|
}
|
|
1887
1814
|
// install-time admin-auth invariant check. Walks every
|
|
1888
1815
|
// data/accounts/*/account.json admins[] and compares to the persistent
|
|
1889
|
-
// users.json. Log-only (does NOT refuse install)
|
|
1890
|
-
// with already-divergent state still upgrade; the [install-invariant]
|
|
1816
|
+
// users.json. Log-only (does NOT refuse install); the [install-invariant]
|
|
1891
1817
|
// line surfaces the bug to the operator without bricking the device.
|
|
1892
1818
|
// Inline rather than imported from platform/lib/admins-write because the
|
|
1893
1819
|
// installer is its own npm package and doesn't bundle the platform lib.
|
|
@@ -2406,11 +2332,26 @@ function writeInstallDefaults(accountId) {
|
|
|
2406
2332
|
writeFileSync(accountJsonPath, JSON.stringify(config, null, 2) + "\n");
|
|
2407
2333
|
console.log(` [install-defaults] account-json plugins=${enabledPlugins.length} outputStyle=default thinkingView=default`);
|
|
2408
2334
|
logFile(` [install-defaults] account-json plugins=${enabledPlugins.length} outputStyle=default thinkingView=default`);
|
|
2335
|
+
// Admin SOUL.md is sourced from the bundled template with ${PRODUCT_NAME}
|
|
2336
|
+
// substituted at install time. The template carries the Phase 1 standing
|
|
2337
|
+
// offer (brochure / preval / Loop CRM) so the agent ships with a stated
|
|
2338
|
+
// capability set rather than a one-line operator-tag.
|
|
2409
2339
|
const soulPath = join(accountDir, "agents/admin/SOUL.md");
|
|
2410
2340
|
mkdirSync(dirname(soulPath), { recursive: true });
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2341
|
+
const adminSoulTemplate = join(INSTALL_DIR, "platform/templates/agents/admin/SOUL.md");
|
|
2342
|
+
let soulContent;
|
|
2343
|
+
try {
|
|
2344
|
+
soulContent = readFileSync(adminSoulTemplate, "utf-8");
|
|
2345
|
+
}
|
|
2346
|
+
catch (err) {
|
|
2347
|
+
console.error(` [install-defaults] admin-soul template missing at ${adminSoulTemplate}: ${err.message}`);
|
|
2348
|
+
logFile(` [install-defaults] admin-soul template missing: ${err.message}`);
|
|
2349
|
+
return;
|
|
2350
|
+
}
|
|
2351
|
+
soulContent = soulContent.replace(/\$\{PRODUCT_NAME\}/g, BRAND.productName);
|
|
2352
|
+
writeFileSync(soulPath, soulContent);
|
|
2353
|
+
console.log(` [install-defaults] soul-md path=${soulPath} bytes=${soulContent.length}`);
|
|
2354
|
+
logFile(` [install-defaults] soul-md path=${soulPath} bytes=${soulContent.length}`);
|
|
2414
2355
|
// Public agent files — IDENTITY.md is always overwritten (Rubytech-controlled);
|
|
2415
2356
|
// SOUL.md and config.json are created if missing (user-controlled). All three
|
|
2416
2357
|
// are sourced from the payload templates under
|
|
@@ -2552,13 +2493,6 @@ function resolveInstallAccountId() {
|
|
|
2552
2493
|
catch { /* directory unreadable */ }
|
|
2553
2494
|
return "";
|
|
2554
2495
|
}
|
|
2555
|
-
// `installCrons()` and the `# BEGIN/END <BRAND> CRONS` block lived
|
|
2556
|
-
// here. All such events must be user-driven, not scheduled by the installer.
|
|
2557
|
-
// The legacy block recreated `data/accounts/<accountId>/logs/` every 60s via
|
|
2558
|
-
// `mkdir -p`, which tripped seed-neo4j.sh's stub-account-dirs guard on every
|
|
2559
|
-
// reinstall after `rm -rf ~/<installDir>`. Uninstall now strips the legacy
|
|
2560
|
-
// block (uninstall.ts `removeLegacyCronBlock`) so older installs migrate
|
|
2561
|
-
// cleanly. Consumer-side dispatcher replacement is tracked separately.
|
|
2562
2496
|
// retired the ttyd/tmux/xterm admin terminal stack. Upgrades run
|
|
2563
2497
|
// via the action runner — `systemd-run --user` transient units spawned by
|
|
2564
2498
|
// POST /api/admin/actions/upgrade — whose lifetime is independent of
|
package/dist/uninstall.js
CHANGED
|
@@ -158,11 +158,7 @@ function stopServices() {
|
|
|
158
158
|
// the edge service owns the public port and VNC stack. Stop it
|
|
159
159
|
// after the main brand service so the edge's ExecStopPost (vnc.sh stop)
|
|
160
160
|
// runs cleanly. The edge unit is per-brand (`<hostname>-edge`).
|
|
161
|
-
// retired the ttyd unit; pre-664 devices may still have
|
|
162
|
-
// `<hostname>-ttyd` — best-effort stop so the uninstall is clean on
|
|
163
|
-
// upgraded devices too.
|
|
164
161
|
const edgeUnitShort = `${BRAND.hostname}-edge`;
|
|
165
|
-
const legacyTtydUnitShort = `${BRAND.hostname}-ttyd`;
|
|
166
162
|
try {
|
|
167
163
|
spawnSync("systemctl", ["--user", "stop", edgeUnitShort], { stdio: "pipe", timeout: 15_000 });
|
|
168
164
|
console.log(` Stopped ${edgeUnitShort}`);
|
|
@@ -170,11 +166,6 @@ function stopServices() {
|
|
|
170
166
|
catch {
|
|
171
167
|
console.log(` ${edgeUnitShort} not running`);
|
|
172
168
|
}
|
|
173
|
-
try {
|
|
174
|
-
spawnSync("systemctl", ["--user", "stop", legacyTtydUnitShort], { stdio: "pipe", timeout: 15_000 });
|
|
175
|
-
console.log(` Stopped ${legacyTtydUnitShort} (legacy pre-664 unit)`);
|
|
176
|
-
}
|
|
177
|
-
catch { /* not present on post-664 installs */ }
|
|
178
169
|
// Stop Neo4j — dedicated branded instance if this brand uses one, else shared.
|
|
179
170
|
// Brand isolation: never stop `neo4j.service` when this brand runs
|
|
180
171
|
// a dedicated `neo4j-<hostname>.service` — stopping the shared instance would
|
|
@@ -234,80 +225,6 @@ function stopServices() {
|
|
|
234
225
|
console.log(" Stopped Ollama");
|
|
235
226
|
}
|
|
236
227
|
// ---------------------------------------------------------------------------
|
|
237
|
-
// Step 1b: Strip the legacy installer-registered cron block
|
|
238
|
-
//
|
|
239
|
-
// retired `installCrons()` in src/index.ts. Older installs (every
|
|
240
|
-
// brand prior to the release) wrote three minute-cadence entries
|
|
241
|
-
// between `# BEGIN <BRAND> CRONS` and `# END <BRAND> CRONS`. This step
|
|
242
|
-
// removes that block on uninstall so an upgraded device is fully torn down
|
|
243
|
-
// and a subsequent reinstall does not get re-seeded by cron recreating
|
|
244
|
-
// `data/accounts/<accountId>/logs/` every 60s (which tripped seed-neo4j.sh's
|
|
245
|
-
// stub-account-dirs guard). Idempotent:
|
|
246
|
-
// no-op when the block is absent. Gated on Linux to mirror the installer's
|
|
247
|
-
// `installCrons` which early-returned on every other platform.
|
|
248
|
-
// ---------------------------------------------------------------------------
|
|
249
|
-
function removeLegacyCronBlock() {
|
|
250
|
-
log("1b", "Removing legacy cron block...");
|
|
251
|
-
if (!isLinux()) {
|
|
252
|
-
console.log(" Skipped — non-Linux platform.");
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
if (!commandExists("crontab")) {
|
|
256
|
-
console.log(" crontab not available — nothing to strip.");
|
|
257
|
-
return;
|
|
258
|
-
}
|
|
259
|
-
const current = spawnSync("crontab", ["-l"], { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
260
|
-
// Non-zero status (or empty stdout) on `crontab -l` means the user has no
|
|
261
|
-
// crontab at all — nothing to strip, and writing back would create one.
|
|
262
|
-
if (current.status !== 0 || !current.stdout) {
|
|
263
|
-
console.log(" Cron block: none present");
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
const beginMarker = `# BEGIN ${BRAND.productName.toUpperCase()} CRONS`;
|
|
267
|
-
const endMarker = `# END ${BRAND.productName.toUpperCase()} CRONS`;
|
|
268
|
-
const escapeRegex = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
269
|
-
const blockPattern = new RegExp(`${escapeRegex(beginMarker)}[\\s\\S]*?${escapeRegex(endMarker)}\\n?`, "g");
|
|
270
|
-
// Count entry lines (non-comment, non-blank) between markers for the
|
|
271
|
-
// operator-visible log. matchAll returns all block bodies in one pass.
|
|
272
|
-
const extractPattern = new RegExp(`${escapeRegex(beginMarker)}([\\s\\S]*?)${escapeRegex(endMarker)}`, "g");
|
|
273
|
-
let entryCount = 0;
|
|
274
|
-
for (const match of current.stdout.matchAll(extractPattern)) {
|
|
275
|
-
entryCount += match[1]
|
|
276
|
-
.split("\n")
|
|
277
|
-
.filter((l) => l.trim().length > 0 && !l.trim().startsWith("#"))
|
|
278
|
-
.length;
|
|
279
|
-
}
|
|
280
|
-
if (entryCount === 0 && !blockPattern.test(current.stdout)) {
|
|
281
|
-
console.log(" Cron block: none present");
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
const stripped = current.stdout.replace(blockPattern, "").trimEnd();
|
|
285
|
-
if (stripped.length === 0) {
|
|
286
|
-
// Block was the only content — remove the crontab outright so `crontab -l`
|
|
287
|
-
// reports "no crontab for admin" (success criterion). Writing an
|
|
288
|
-
// empty buffer via `crontab -` leaves a zero-byte crontab on Debian.
|
|
289
|
-
const removed = spawnSync("crontab", ["-r"], { stdio: "pipe" });
|
|
290
|
-
if (removed.status !== 0) {
|
|
291
|
-
console.log(` Cron block: stripped ${entryCount} entries but crontab -r failed — ${(removed.stderr ?? "").toString().trim()}`);
|
|
292
|
-
logFile(` crontab -r failed: ${removed.stderr}`);
|
|
293
|
-
return;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
297
|
-
const write = spawnSync("crontab", ["-"], {
|
|
298
|
-
input: stripped + "\n",
|
|
299
|
-
encoding: "utf-8",
|
|
300
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
301
|
-
});
|
|
302
|
-
if (write.status !== 0) {
|
|
303
|
-
console.log(` Cron block: write failed — ${(write.stderr ?? "").trim()}`);
|
|
304
|
-
logFile(` crontab write failed: ${write.stderr}`);
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
console.log(` Cron block: removed ${entryCount} entries`);
|
|
309
|
-
}
|
|
310
|
-
// ---------------------------------------------------------------------------
|
|
311
228
|
// Step 2: Delete Cloudflare tunnel
|
|
312
229
|
// ---------------------------------------------------------------------------
|
|
313
230
|
function deleteCloudflareTunnel() {
|
|
@@ -702,27 +619,20 @@ function removeSystemdService() {
|
|
|
702
619
|
console.log(` Failed to remove service file: ${err instanceof Error ? err.message : String(err)}`);
|
|
703
620
|
}
|
|
704
621
|
}
|
|
705
|
-
// remove this brand's per-brand edge unit alongside the
|
|
706
|
-
// main brand unit. The per-brand ttyd unit is retired, but an
|
|
707
|
-
// upgraded device may still have `<hostname>-ttyd.service` on disk from
|
|
708
|
-
// a pre-664 install — cleanup both so the uninstall leaves nothing
|
|
709
|
-
// behind on either generation.
|
|
622
|
+
// remove this brand's per-brand edge unit alongside the main brand unit.
|
|
710
623
|
const thisBrandEdge = `${BRAND.hostname}-edge`;
|
|
711
|
-
|
|
712
|
-
|
|
624
|
+
try {
|
|
625
|
+
spawnSync("systemctl", ["--user", "disable", thisBrandEdge], { stdio: "pipe" });
|
|
626
|
+
}
|
|
627
|
+
catch { /* ignore */ }
|
|
628
|
+
const edgeUnitFile = resolve(HOME, `.config/systemd/user/${thisBrandEdge}.service`);
|
|
629
|
+
if (existsSync(edgeUnitFile)) {
|
|
713
630
|
try {
|
|
714
|
-
|
|
631
|
+
rmSync(edgeUnitFile);
|
|
632
|
+
console.log(` Removed ${thisBrandEdge}.service`);
|
|
715
633
|
}
|
|
716
|
-
catch {
|
|
717
|
-
|
|
718
|
-
if (existsSync(unitFile)) {
|
|
719
|
-
try {
|
|
720
|
-
rmSync(unitFile);
|
|
721
|
-
console.log(` Removed ${unit}.service`);
|
|
722
|
-
}
|
|
723
|
-
catch (err) {
|
|
724
|
-
console.log(` Failed to remove ${unit}.service: ${err instanceof Error ? err.message : String(err)}`);
|
|
725
|
-
}
|
|
634
|
+
catch (err) {
|
|
635
|
+
console.log(` Failed to remove ${thisBrandEdge}.service: ${err instanceof Error ? err.message : String(err)}`);
|
|
726
636
|
}
|
|
727
637
|
}
|
|
728
638
|
// Reload daemon
|
|
@@ -965,7 +875,6 @@ export async function runUninstall(options) {
|
|
|
965
875
|
const failures = [];
|
|
966
876
|
const steps = [
|
|
967
877
|
{ name: "Stop services", fn: stopServices },
|
|
968
|
-
{ name: "Remove legacy cron block", fn: removeLegacyCronBlock },
|
|
969
878
|
{ name: "Delete Cloudflare tunnel", fn: deleteCloudflareTunnel },
|
|
970
879
|
...(options.exportPath
|
|
971
880
|
? [{ name: "Export data", fn: () => exportData(options.exportPath) }]
|
package/package.json
CHANGED
|
@@ -56,7 +56,7 @@ Cloudflare, WhatsApp, Telegram, and any other dormant capability surfaces on own
|
|
|
56
56
|
|
|
57
57
|
### Per-spawn system-prompt sentinels
|
|
58
58
|
|
|
59
|
-
Every PTY spawn injects an `--append-system-prompt` block composed of
|
|
59
|
+
Every PTY spawn injects an `--append-system-prompt` block composed of these sentinel sections in fixed order:
|
|
60
60
|
|
|
61
61
|
| Sentinel | Source | Behaviour on resolve failure |
|
|
62
62
|
|---|---|---|
|
|
@@ -65,15 +65,19 @@ Every PTY spawn injects an `--append-system-prompt` block composed of six sentin
|
|
|
65
65
|
| `<identity>` | `<accountDir>/agents/<role>/IDENTITY.md` | spawn refuses with `identity-unresolved` |
|
|
66
66
|
| `<soul>` | `<accountDir>/agents/<role>/SOUL.md` | spawn refuses with `identity-unresolved` |
|
|
67
67
|
| `<about-owner>` | upstream `loadUserProfile` + `formatProfileSummary` (UI process) | sentinel carries `coverage-unresolved: <reason>`; spawn proceeds |
|
|
68
|
+
| `<specialist-domains>` | `<accountDir>/specialists/agents/*.md` frontmatter (UI process) | sentinel omitted when set is empty |
|
|
69
|
+
| `<plugin-manifest>` | enabled plugins' PLUGIN.md frontmatter + skill SKILL.md frontmatter (UI process) | sentinel omitted when set is empty |
|
|
68
70
|
| `<dormant-plugins>` | installed-minus-enabled set from `platform/plugins/` and `account.json` | sentinel omitted when set is empty |
|
|
69
71
|
|
|
70
72
|
Diagnostic line per spawn (`~/.<brand>/logs/server.log`):
|
|
71
73
|
|
|
72
74
|
```
|
|
73
|
-
[pty-spawn] sessionId=<id> appendSystemPromptBytes=<n> identityBytes=<n> soulBytes=<n> aboutOwnerBytes=<n> dormantPluginsBytes=<n> accountDir=<path> role=<admin|public> hostname=<h> lanIPv4=<ip> adminUrl=<url> tunnelUrl=<url|none>
|
|
75
|
+
[pty-spawn] sessionId=<id> appendSystemPromptBytes=<n> identityBytes=<n> soulBytes=<n> aboutOwnerBytes=<n> dormantPluginsBytes=<n> pluginManifestBytes=<n> specialistDomainsBytes=<n> accountDir=<path> role=<admin|public> hostname=<h> lanIPv4=<ip> adminUrl=<url> tunnelUrl=<url|none>
|
|
74
76
|
```
|
|
75
77
|
|
|
76
|
-
|
|
78
|
+
The `pty-spawn-start` line additionally carries `hooksResolved=<event1,event2,…>` — the hook event names Claude Code would actually load for that PTY (resolved by walking the same `$CLAUDE_CONFIG_DIR/settings.json` plus the cwd-to-.git path Claude Code itself uses). A Stop hook registered in a settings file outside the loader's scope shows up as a missing event in this list.
|
|
79
|
+
|
|
80
|
+
Zero `aboutOwnerBytes` on a fresh-account spawn (sparse profile) is a regression: the upstream resolver returned ok:false with a reason, and the operator should see `coverage-unresolved: <reason>` in the agent's first turn. Zero `dormantPluginsBytes` on a Maxy install with `cloudflare` not enabled is likewise a regression. Zero `pluginManifestBytes` on any account with enabled plugins means the upstream walker failed silently.
|
|
77
81
|
|
|
78
82
|
The manager also runs a boot-time self-test that renders a fixture compose call against synthetic inputs and refuses to start if any sentinel is missing:
|
|
79
83
|
|
|
@@ -70,7 +70,7 @@ There is no dashboard, no settings panel, no menus. Everything is done through c
|
|
|
70
70
|
|
|
71
71
|
The chat input auto-grows as you type — it expands to fit your message and shrinks back when you delete text. You can also drag the resize handle above the input to set a custom height.
|
|
72
72
|
|
|
73
|
-
The admin interface is a three-pane layout: a sidebar on the left with navigation (Sessions, People, Agents, Projects, Tasks, Artefacts) and your recent conversations; the chat in the middle; and an artefact pane on the right that opens when you select a document, click a project, or open Browser, Data, or Graph from the menu, holding the surface side-by-side with the conversation so the chat stays live while you work in it. At the very top of the sidebar — above the nav rows — a borderless row holds two controls: a "+ New session" button on the left that spawns a fresh Claude Code session, and a Mode trigger on the right showing the current permission mode (Ask, Accept edits, Plan, or Auto). The sidebar's vertical order is: new-session strip first, then the nav (Sessions, People, Agents, Projects, Tasks, Artefacts), then the sessions list, then the footer. Both controls render as plain text-plus-icon affordances with no surrounding rectangle
|
|
73
|
+
The admin interface is a three-pane layout: a sidebar on the left with navigation (Sessions, People, Agents, Projects, Tasks, Artefacts) and your recent conversations; the chat in the middle; and an artefact pane on the right that opens when you select a document, click a project, or open Browser, Data, or Graph from the menu, holding the surface side-by-side with the conversation so the chat stays live while you work in it. At the very top of the sidebar — above the nav rows — a borderless row holds two controls: a "+ New session" button on the left that spawns a fresh Claude Code session, and a Mode trigger on the right showing the current permission mode (Ask, Accept edits, Plan, or Auto). The sidebar's vertical order is: new-session strip first, then the nav (Sessions, People, Agents, Projects, Tasks, Artefacts), then the sessions list, then the footer. Both controls render as plain text-plus-icon affordances with no surrounding rectangle. The "+ New session" button is a text-width hit target — its clickable area is exactly the icon plus label, not the whole row — and shows no hover fill; the only hover feedback is the pointer cursor. The Mode trigger is pushed flush to the right edge of the row. Clicking the Mode trigger opens a popover downward from the row whose header reads "Mode" and lists the four permission modes with the current selection check-marked. The sidebar's nav rows swap the list view in place: Sessions shows recent conversations, Projects shows your active work projects, and Artefacts lists every KnowledgeDocument plus this account's agent templates (your admin agent's IDENTITY, SOUL, and KNOWLEDGE files plus one entry per enabled specialist). Each recent session row carries a small status dot (filled sage for alive, hollow circle for ended) so you can read the live state at a glance without parsing the subtitle. The People, Agents, and Tasks rows are graph shortcuts: clicking each opens the artefact-pane Graph filtered to every Person, every public Agent, or every Task in your account respectively, with no side-list, because the graph itself is the result. Public agents become first-class graph entities the moment you create them, with edges to their IDENTITY/SOUL/KNOWLEDGE files, edges to every knowledge document they have access to, and edges from every conversation they have handled, so a single Agents click reveals the whole shape of who knows what and who has been talking to whom. Click an artefact row to open the document. KnowledgeDocuments and your admin agent's templates are editable: type in the document and changes save automatically; specialist agent templates are read-only because they ship with Maxy and your edits would be overwritten on the next install. PDF artefacts render inline so you can read them without leaving the pane. If your browser doesn't have a built-in PDF viewer, a Download button appears instead. Artefacts that have no readable file backing them (orphan rows, files removed from disk, unsupported content types) show a one-line banner explaining the skip instead of opening to a blank pane. Click a project row to open the Graph view focused on that project's neighbourhood; clicking a second project swaps the focus rather than stacking on top. The chat and artefact divider is drag-resizable: drag the line between the columns to make either side wider; double-click it to reset to half of the available width (viewport minus sidebar), clamped to the chat and artefact min-width floors. Your chosen width is remembered across reloads. On wider screens (>1280px) all three panes are visible. The sidebar narrows at 1280px, the artefact pane hides at 1080px (Browser, Data, and Graph then open as full-window pages instead), and the sidebar collapses to a 56px icon rail at 820px. On every viewport the chat header reads left to right as a triptych: a dedicated sidebar toggle (the panel-right icon, which swaps to panel-right-open when the sidebar is showing), the brand mark next to the title in the centre, and the menu burger on the right. This header toggle is the sole sidebar-toggle button; the sidebar itself no longer carries a duplicate. Tap the sidebar toggle to show or hide the sidebar: on phones (<720px) it slides the drawer in or out, on wider screens it collapses or expands the sidebar column. The brand mark in the centre is decorative; clicks go through the dedicated toggle so the affordance is unambiguous. The drawer animation only fires on tap (220ms slide in or out); resizing your window across the 720px boundary snaps the layout without animation, so you never see a half-open flash. At ≤640px the session metadata pane stacks each label above its value instead of the desktop two-column grid, and the row of action buttons (Open in new tab / Open JSONL / Rename / Pin / Archive / End or Purge) collapses behind a single Actions trigger that opens a popover upward from the foot of the pane. Breakpoint summary: >1280px = full sidebar + chat + artefact pane (drag-resizable divider); 1280px→1080px = sidebar narrows; 1080px→820px = artefact pane hides (Browser/Data/Graph open as full-window pages instead); 820px→720px = sidebar collapses to 56px icon rail; ≤720px = sidebar becomes off-canvas drawer (vertical stack of nav, recents list, foot, the same shape as the desktop sidebar, just on top of the chat instead of beside it).
|
|
74
74
|
|
|
75
75
|
Page titles are brand-aware: the browser tab shows your product name (e.g. `Real Agent` instead of `Maxy`) on every shell — chat, graph, and data — so a non-default brand never leaks the default name in tab strips or browser history.
|
|
76
76
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAA;AAGhC,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD;;4DAEwD;IACxD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB;;;;;;;8BAO0B;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB;;;qDAGiD;IACjD,iBAAiB,EAAE,iBAAiB,CAAA;CACrC;AAsJD,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAA;AAGhC,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD;;4DAEwD;IACxD,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB;;;;;;;8BAO0B;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB;;;qDAGiD;IACjD,iBAAiB,EAAE,iBAAiB,CAAA;CACrC;AAsJD,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,aAAa,CAkE9E"}
|
|
@@ -146,7 +146,6 @@ export function loadConfig(env = process.env) {
|
|
|
146
146
|
}
|
|
147
147
|
const persistDir = env.CLAUDE_SESSION_MANAGER_PERSIST_DIR ?? join(homedir(), '.maxy');
|
|
148
148
|
const claudeBin = env.CLAUDE_BIN ?? 'claude';
|
|
149
|
-
const spawnCwd = env.CLAUDE_SESSION_MANAGER_SPAWN_CWD ?? process.cwd();
|
|
150
149
|
const brand = loadBrand(env);
|
|
151
150
|
const platformRoot = env.PLATFORM_ROOT ?? env.MAXY_PLATFORM_ROOT;
|
|
152
151
|
if (!platformRoot) {
|
|
@@ -159,6 +158,12 @@ export function loadConfig(env = process.env) {
|
|
|
159
158
|
throw new Error(`[claude-session-manager] account-dir-unresolved: no <installDir>/data/accounts/<uuid>/account.json under ${dirname(platformRoot)}/data/accounts. ` +
|
|
160
159
|
'The installer (seed-neo4j.sh / writeInstallDefaults) must run before manager start.');
|
|
161
160
|
}
|
|
161
|
+
// Claude Code walks `.claude/settings.json` from cwd to .git root. Defaulting
|
|
162
|
+
// spawnCwd to process.cwd() — i.e. the manager service directory — strands
|
|
163
|
+
// the account-scoped settings.json (and its Stop hook) outside that walk.
|
|
164
|
+
// Default to accountDir so seed-neo4j.sh's `<accountDir>/.claude/settings.json`
|
|
165
|
+
// is on the discovery path. Env-var override is preserved for tests.
|
|
166
|
+
const spawnCwd = env.CLAUDE_SESSION_MANAGER_SPAWN_CWD ?? accountDir;
|
|
162
167
|
const lan = resolveLanIPv4();
|
|
163
168
|
const brandPort = resolveBrandPort(env);
|
|
164
169
|
const osHost = hostname();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
declare const HOOK_EVENTS: readonly ["PreToolUse", "PostToolUse", "UserPromptSubmit", "Stop", "SubagentStop", "PreCompact", "Notification", "SessionStart", "SessionEnd"];
|
|
2
|
+
export type HookEvent = (typeof HOOK_EVENTS)[number];
|
|
3
|
+
/** Resolve the set of hook event names Claude Code would load for a PTY
|
|
4
|
+
* launched with the given `cwd` and `CLAUDE_CONFIG_DIR`. */
|
|
5
|
+
export declare function discoverHooks(spawnCwd: string, claudeConfigDir: string | undefined): HookEvent[];
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=hooks-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-discovery.d.ts","sourceRoot":"","sources":["../src/hooks-discovery.ts"],"names":[],"mappings":"AAmBA,QAAA,MAAM,WAAW,gJAUP,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAgDpD;6DAC6D;AAC7D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,CAOhG"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Mirror of Claude Code's settings-discovery walk for hook resolution.
|
|
2
|
+
// Run at spawn time so the operator can see which hook events Claude Code
|
|
3
|
+
// would actually load for the PTY about to start. If a Stop hook entry
|
|
4
|
+
// lives in an unread settings.json (e.g. wrong cwd, wrong CLAUDE_CONFIG_DIR),
|
|
5
|
+
// the absence shows up in the `hooksResolved=` field of `pty-spawn-start`.
|
|
6
|
+
//
|
|
7
|
+
// Claude Code's order, from the docs:
|
|
8
|
+
// 1. enterprise managed settings (skipped here — out of scope)
|
|
9
|
+
// 2. user settings: $CLAUDE_CONFIG_DIR/settings.json (or ~/.claude/settings.json)
|
|
10
|
+
// 3. project settings: walk parents of cwd up to .git for
|
|
11
|
+
// .claude/settings.json and .claude/settings.local.json
|
|
12
|
+
// We accumulate the set of hook event names declared across all readable
|
|
13
|
+
// files. We do NOT execute or rank-order them — this is observability,
|
|
14
|
+
// not policy.
|
|
15
|
+
import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
16
|
+
import { dirname, join } from 'node:path';
|
|
17
|
+
import { homedir } from 'node:os';
|
|
18
|
+
const HOOK_EVENTS = [
|
|
19
|
+
'PreToolUse',
|
|
20
|
+
'PostToolUse',
|
|
21
|
+
'UserPromptSubmit',
|
|
22
|
+
'Stop',
|
|
23
|
+
'SubagentStop',
|
|
24
|
+
'PreCompact',
|
|
25
|
+
'Notification',
|
|
26
|
+
'SessionStart',
|
|
27
|
+
'SessionEnd',
|
|
28
|
+
];
|
|
29
|
+
function readSettings(path) {
|
|
30
|
+
try {
|
|
31
|
+
if (!existsSync(path))
|
|
32
|
+
return null;
|
|
33
|
+
const raw = readFileSync(path, 'utf-8');
|
|
34
|
+
return JSON.parse(raw);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function eventsWithHooks(parsed, into) {
|
|
41
|
+
if (!parsed || typeof parsed !== 'object')
|
|
42
|
+
return;
|
|
43
|
+
const hooks = parsed.hooks;
|
|
44
|
+
if (!hooks || typeof hooks !== 'object')
|
|
45
|
+
return;
|
|
46
|
+
for (const event of HOOK_EVENTS) {
|
|
47
|
+
const list = hooks[event];
|
|
48
|
+
if (Array.isArray(list) && list.length > 0)
|
|
49
|
+
into.add(event);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function isDir(path) {
|
|
53
|
+
try {
|
|
54
|
+
return statSync(path).isDirectory();
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Walk cwd's parents up to (and including) the first .git ancestor, or to
|
|
61
|
+
* filesystem root if no .git is found. At each level, look for
|
|
62
|
+
* `.claude/settings.json` and `.claude/settings.local.json`. */
|
|
63
|
+
function projectSettingsPaths(cwd) {
|
|
64
|
+
const out = [];
|
|
65
|
+
let cur = cwd;
|
|
66
|
+
// Bound the walk to avoid pathological symlink loops.
|
|
67
|
+
for (let i = 0; i < 64; i++) {
|
|
68
|
+
out.push(join(cur, '.claude', 'settings.json'));
|
|
69
|
+
out.push(join(cur, '.claude', 'settings.local.json'));
|
|
70
|
+
if (isDir(join(cur, '.git')))
|
|
71
|
+
break;
|
|
72
|
+
const parent = dirname(cur);
|
|
73
|
+
if (parent === cur)
|
|
74
|
+
break;
|
|
75
|
+
cur = parent;
|
|
76
|
+
}
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
/** Resolve the set of hook event names Claude Code would load for a PTY
|
|
80
|
+
* launched with the given `cwd` and `CLAUDE_CONFIG_DIR`. */
|
|
81
|
+
export function discoverHooks(spawnCwd, claudeConfigDir) {
|
|
82
|
+
const userSettingsPath = join(claudeConfigDir ?? join(homedir(), '.claude'), 'settings.json');
|
|
83
|
+
const projectPaths = projectSettingsPaths(spawnCwd);
|
|
84
|
+
const found = new Set();
|
|
85
|
+
eventsWithHooks(readSettings(userSettingsPath), found);
|
|
86
|
+
for (const p of projectPaths)
|
|
87
|
+
eventsWithHooks(readSettings(p), found);
|
|
88
|
+
return HOOK_EVENTS.filter((e) => found.has(e));
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=hooks-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-discovery.js","sourceRoot":"","sources":["../src/hooks-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAA4E,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAK3H,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAA4E,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAK3H,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAkF3D,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,iBAAiB,CAAC;IAC5E,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,WAAW,CAAA;IAC/B,eAAe,EAAE,aAAa,CAAA;CAC/B;AAiED,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAojBjD"}
|