@centralu/darwin-arm64 0.1.0-beta.11 → 0.1.0-beta.13
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/Centralu.app/Contents/Info.plist +2 -2
- package/Centralu.app/Contents/MacOS/centralu +0 -0
- package/Centralu.app/Contents/MacOS/centralu-keeper +0 -0
- package/Centralu.app/Contents/Resources/content/centralu-keeper +0 -0
- package/Centralu.app/Contents/Resources/content/content-manifest.json +506 -0
- package/Centralu.app/Contents/Resources/content/content-manifest.json.sig +7 -0
- package/Centralu.app/Contents/Resources/content/host/app-template/AGENTS.md +140 -0
- package/Centralu.app/Contents/Resources/content/host/app-template/CLAUDE.md +1 -0
- package/Centralu.app/Contents/Resources/content/host/app-template/centralu.app.json +9 -0
- package/Centralu.app/Contents/Resources/content/host/app-template/gitattributes +2 -0
- package/Centralu.app/Contents/Resources/content/host/app-template/runtime/THIRD_PARTY_LICENSES.txt +950 -0
- package/Centralu.app/Contents/Resources/content/host/app-template/runtime/centralu-app-runtime.mjs +82 -0
- package/Centralu.app/Contents/Resources/content/host/app-template/runtime/centralu-app-runtime.mjs.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/app-template/runtime/mcp-app.js +104 -0
- package/Centralu.app/Contents/Resources/content/host/app-template/server.mjs +71 -0
- package/Centralu.app/Contents/Resources/content/host/app-template/ui/index.html +145 -0
- package/Centralu.app/Contents/Resources/content/host/bundle-info.json +8 -0
- package/Centralu.app/Contents/Resources/content/host/codex-orchestrator-bridge.mjs +3858 -0
- package/Centralu.app/Contents/Resources/content/host/main.mjs +116069 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/binding.js +62 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/darwin-arm64.js +3 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/darwin-x64.js +3 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/database.js +109 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/index.js +3 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/linux-arm64.js +3 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/linux-x64.js +3 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/linuxmusl-arm64.js +4 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/linuxmusl-x64.js +4 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/methods/aggregate.js +43 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/methods/backup.js +67 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/methods/explain.js +9 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/methods/function.js +31 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/methods/inspect.js +7 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/methods/pragma.js +12 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/methods/serialize.js +16 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/methods/table.js +195 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/methods/transaction.js +78 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/methods/wrappers.js +54 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/sqlite-error.js +25 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/util.js +12 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/win32-arm64.js +3 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/lib/win32-x64.js +3 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/package.json +67 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/better-sqlite3/prebuilds/darwin-arm64.node +0 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/conpty_console_list_agent.js +16 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/conpty_console_list_agent.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/eventEmitter2.js +47 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/eventEmitter2.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/eventEmitter2.test.js +30 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/eventEmitter2.test.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/index.js +52 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/index.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/interfaces.js +7 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/interfaces.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/shared/conout.js +11 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/shared/conout.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/terminal.js +190 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/terminal.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/terminal.test.js +139 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/terminal.test.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/testUtils.test.js +28 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/testUtils.test.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/types.js +7 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/types.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/unixTerminal.js +346 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/unixTerminal.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/unixTerminal.test.js +351 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/unixTerminal.test.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/utils.js +39 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/utils.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/windowsConoutConnection.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/windowsPtyAgent.js +320 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/windowsPtyAgent.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/windowsPtyAgent.test.js +90 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/windowsPtyAgent.test.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/windowsTerminal.js +199 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/windowsTerminal.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/windowsTerminal.test.js +219 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/windowsTerminal.test.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/lib/worker/conoutSocketWorker.js.map +1 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/package.json +64 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
- package/Centralu.app/Contents/Resources/content/host/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
- package/Centralu.app/Contents/Resources/content/host/remote-runtime.json +21 -0
- package/Centralu.app/Contents/Resources/content/host/schema.sql +98 -0
- package/Centralu.app/Contents/Resources/resources/host/bundle-info.json +2 -2
- package/Centralu.app/Contents/Resources/resources/host/main.mjs +3064 -858
- package/Centralu.app/Contents/Resources/resources/host/remote-runtime.json +21 -0
- package/Centralu.app/Contents/Resources/resources/host/schema.sql +4 -0
- package/Centralu.app/Contents/Resources/shell/Centralu.app/Contents/Info.plist +82 -0
- package/Centralu.app/Contents/Resources/shell/Centralu.app/Contents/MacOS/centralu-shell +0 -0
- package/Centralu.app/Contents/Resources/shell/Centralu.app/Contents/Resources/icon.icns +0 -0
- package/Centralu.app/Contents/Resources/shell/Centralu.app/Contents/_CodeSignature/CodeResources +128 -0
- package/Centralu.app/Contents/Resources/shell/shell.json +6 -0
- package/Centralu.app/Contents/_CodeSignature/CodeResources +1019 -9
- package/package.json +1 -1
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
<key>CFBundlePackageType</key>
|
|
18
18
|
<string>APPL</string>
|
|
19
19
|
<key>CFBundleShortVersionString</key>
|
|
20
|
-
<string>0.1.0-beta.
|
|
20
|
+
<string>0.1.0-beta.13</string>
|
|
21
21
|
<key>CFBundleVersion</key>
|
|
22
|
-
<string>0.1.0-beta.
|
|
22
|
+
<string>0.1.0-beta.13</string>
|
|
23
23
|
<key>CSResourcesFileMapped</key>
|
|
24
24
|
<true/>
|
|
25
25
|
<key>LSApplicationCategoryType</key>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": 1,
|
|
3
|
+
"appVersion": "0.1.0-beta.13",
|
|
4
|
+
"platform": "darwin-arm64",
|
|
5
|
+
"minShellVersion": 1,
|
|
6
|
+
"files": [
|
|
7
|
+
{
|
|
8
|
+
"path": "centralu-keeper",
|
|
9
|
+
"size": 972320,
|
|
10
|
+
"sha256": "660ef00f89f391a1a17042b8927f4241bb25df385a5da151795d5bf169cfceb7",
|
|
11
|
+
"executable": true
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"path": "host/app-template/AGENTS.md",
|
|
15
|
+
"size": 10383,
|
|
16
|
+
"sha256": "6154e3069ff095bb7035a6768e3366cec7e84ff2a0ba2fc8ed67c0581dbaba8b",
|
|
17
|
+
"executable": false
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"path": "host/app-template/CLAUDE.md",
|
|
21
|
+
"size": 11,
|
|
22
|
+
"sha256": "336cc4fbf19beaada7ccf9986414fa91851a8d7a07dfb3ccbe800a69eed0ab49",
|
|
23
|
+
"executable": false
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"path": "host/app-template/centralu.app.json",
|
|
27
|
+
"size": 238,
|
|
28
|
+
"sha256": "0f1cc0b23deb7383a877cde61d0817d42533a66ad69b4b525defbc7375c032ef",
|
|
29
|
+
"executable": false
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"path": "host/app-template/gitattributes",
|
|
33
|
+
"size": 142,
|
|
34
|
+
"sha256": "62e1bf7df96b6862c1a1b8c66f8e39cb31aad0489670c75475b1258245cec2aa",
|
|
35
|
+
"executable": false
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"path": "host/app-template/runtime/THIRD_PARTY_LICENSES.txt",
|
|
39
|
+
"size": 52571,
|
|
40
|
+
"sha256": "ac551b077c3ec25d6ebe457bbf3b2c174eb8b7d8c85ffd1b52fce546d58fcb62",
|
|
41
|
+
"executable": false
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"path": "host/app-template/runtime/centralu-app-runtime.mjs",
|
|
45
|
+
"size": 642710,
|
|
46
|
+
"sha256": "97b0839f01c5ed170f6921df3884e1ce6c30d9b0eb6871b4d289594e94c82564",
|
|
47
|
+
"executable": false
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"path": "host/app-template/runtime/centralu-app-runtime.mjs.map",
|
|
51
|
+
"size": 743679,
|
|
52
|
+
"sha256": "0fc05f9dbd6b192ff74b42e9aadef3c6eaaf9f2f994ecb650e606deba3251cb1",
|
|
53
|
+
"executable": false
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"path": "host/app-template/runtime/mcp-app.js",
|
|
57
|
+
"size": 473677,
|
|
58
|
+
"sha256": "cb5ad8ccdaec624bdf27b3ac585e58d29dc60590d078b9667f6f4947765d5918",
|
|
59
|
+
"executable": false
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"path": "host/app-template/server.mjs",
|
|
63
|
+
"size": 2604,
|
|
64
|
+
"sha256": "60697fa47a26f7851ae496666fa9ee1158e6b5ec6df2eccecfe64fd6144b9038",
|
|
65
|
+
"executable": false
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"path": "host/app-template/ui/index.html",
|
|
69
|
+
"size": 6726,
|
|
70
|
+
"sha256": "47f63220770c85d9f9ec1ab641ce417c0d28c189211d2300070c6447dcb62860",
|
|
71
|
+
"executable": false
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"path": "host/bundle-info.json",
|
|
75
|
+
"size": 162,
|
|
76
|
+
"sha256": "e2b8aa2f42228b72909225cfc3ad8d0cbafb52a1cb5618a8e14e7bc3e982da65",
|
|
77
|
+
"executable": false
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"path": "host/codex-orchestrator-bridge.mjs",
|
|
81
|
+
"size": 134065,
|
|
82
|
+
"sha256": "d1f0b72e4aec9fe5629fca66b5d7bce75428785f671e263d82d10662484bfa90",
|
|
83
|
+
"executable": true
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"path": "host/main.mjs",
|
|
87
|
+
"size": 5223091,
|
|
88
|
+
"sha256": "33bb991398a71155ff24dfe01160afc5d82e1287d09bae6fc8a5884221da4df4",
|
|
89
|
+
"executable": false
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"path": "host/node_modules/better-sqlite3/build/Release/better_sqlite3.node",
|
|
93
|
+
"size": 1980736,
|
|
94
|
+
"sha256": "98e0e8acd01c632fe5615243e1296af0372826f8783b18fc31c506f73c47459c",
|
|
95
|
+
"executable": false
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"path": "host/node_modules/better-sqlite3/lib/binding.js",
|
|
99
|
+
"size": 2123,
|
|
100
|
+
"sha256": "4fe0f892facc02af7db0a1770150565d2e944e7da3c6493116d8e2a01a0f9b19",
|
|
101
|
+
"executable": false
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"path": "host/node_modules/better-sqlite3/lib/darwin-arm64.js",
|
|
105
|
+
"size": 166,
|
|
106
|
+
"sha256": "830ec2bbc0d402f8be13e93d5549c7a9030a2d5eed40f527e4b4aee9f962ec3b",
|
|
107
|
+
"executable": false
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"path": "host/node_modules/better-sqlite3/lib/darwin-x64.js",
|
|
111
|
+
"size": 164,
|
|
112
|
+
"sha256": "2d7671f3e5d0f19e78eb88d6cd2547ec7554acd3844942fa5a8fff61fd8f9c93",
|
|
113
|
+
"executable": false
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"path": "host/node_modules/better-sqlite3/lib/database.js",
|
|
117
|
+
"size": 4729,
|
|
118
|
+
"sha256": "539315c97591561394d2a0f257632305c3af1e32915a123aa8cc9032056d8ae2",
|
|
119
|
+
"executable": false
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"path": "host/node_modules/better-sqlite3/lib/index.js",
|
|
123
|
+
"size": 149,
|
|
124
|
+
"sha256": "0d56e190de8623278641b613433e89c4af2e5c90092c9c6e425f873d7fbc7ccf",
|
|
125
|
+
"executable": false
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"path": "host/node_modules/better-sqlite3/lib/linux-arm64.js",
|
|
129
|
+
"size": 165,
|
|
130
|
+
"sha256": "e2ff6a1e844f0f95794ebe50cea071f235bd57182ac04985819b86498541797c",
|
|
131
|
+
"executable": false
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"path": "host/node_modules/better-sqlite3/lib/linux-x64.js",
|
|
135
|
+
"size": 163,
|
|
136
|
+
"sha256": "96f9bbd76ab65da4f98a4833eb512746db6a99a2728db20feae2d70db0c2e273",
|
|
137
|
+
"executable": false
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"path": "host/node_modules/better-sqlite3/lib/linuxmusl-arm64.js",
|
|
141
|
+
"size": 190,
|
|
142
|
+
"sha256": "2edb0f14e62d3efa76c8089e58207895abb46642d1e988755a5eef5059605de9",
|
|
143
|
+
"executable": false
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"path": "host/node_modules/better-sqlite3/lib/linuxmusl-x64.js",
|
|
147
|
+
"size": 188,
|
|
148
|
+
"sha256": "d28b85927738844f589601e78e241d501c30231e9b9890f8f3605fca6d238f3d",
|
|
149
|
+
"executable": false
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"path": "host/node_modules/better-sqlite3/lib/methods/aggregate.js",
|
|
153
|
+
"size": 1932,
|
|
154
|
+
"sha256": "e9f74eb919ec93fe089c95ddf25a98f1f631c80418fa34fb2346ca1bc29f1b82",
|
|
155
|
+
"executable": false
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"path": "host/node_modules/better-sqlite3/lib/methods/backup.js",
|
|
159
|
+
"size": 2380,
|
|
160
|
+
"sha256": "ea29d34992bb02e006d0fdeda9675ac5d2bb227aaf57468decd997e9fc9c7dbf",
|
|
161
|
+
"executable": false
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"path": "host/node_modules/better-sqlite3/lib/methods/explain.js",
|
|
165
|
+
"size": 292,
|
|
166
|
+
"sha256": "0bd8cc80ccc7338f1d93058beea0cde924d4e7e652da9f51267e7c0757361be7",
|
|
167
|
+
"executable": false
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"path": "host/node_modules/better-sqlite3/lib/methods/function.js",
|
|
171
|
+
"size": 1396,
|
|
172
|
+
"sha256": "f431d49303b8bbdc044b1f1b455bdad21fc9b74b007de0acb22f08f25b4febd3",
|
|
173
|
+
"executable": false
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"path": "host/node_modules/better-sqlite3/lib/methods/inspect.js",
|
|
177
|
+
"size": 174,
|
|
178
|
+
"sha256": "4975a78daee850adee62ba98719d0f223819a0ec135a07c0e302994bd8dbff61",
|
|
179
|
+
"executable": false
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"path": "host/node_modules/better-sqlite3/lib/methods/pragma.js",
|
|
183
|
+
"size": 543,
|
|
184
|
+
"sha256": "d399bf1dbc85ef8a51f946c5a9505f2c37d0b1bed3f68863b1bf202d53d6524e",
|
|
185
|
+
"executable": false
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"path": "host/node_modules/better-sqlite3/lib/methods/serialize.js",
|
|
189
|
+
"size": 625,
|
|
190
|
+
"sha256": "7a10ee5c2735384b7f0c361811bc6d017db29f62b203fd3c68a35f667e2c2605",
|
|
191
|
+
"executable": false
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"path": "host/node_modules/better-sqlite3/lib/methods/table.js",
|
|
195
|
+
"size": 7243,
|
|
196
|
+
"sha256": "2356885ca1ef37d20f2daeed2b82b9dd6e61481e851194174a16d32efa3ae2f0",
|
|
197
|
+
"executable": false
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"path": "host/node_modules/better-sqlite3/lib/methods/transaction.js",
|
|
201
|
+
"size": 2855,
|
|
202
|
+
"sha256": "40b71d6113f328f96cec8f6f888ffddd98b5926d38fb1e2746939c7daba93e2e",
|
|
203
|
+
"executable": false
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"path": "host/node_modules/better-sqlite3/lib/methods/wrappers.js",
|
|
207
|
+
"size": 1152,
|
|
208
|
+
"sha256": "b289d339ff56b19ab40d109050080e1c844f2a5d01e62d8cb37a0152b0479a47",
|
|
209
|
+
"executable": false
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"path": "host/node_modules/better-sqlite3/lib/sqlite-error.js",
|
|
213
|
+
"size": 512,
|
|
214
|
+
"sha256": "903c140bb3d9d4f6256124889f5a820a491299907885d5b9d5ff2c4eaa268a06",
|
|
215
|
+
"executable": false
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
"path": "host/node_modules/better-sqlite3/lib/util.js",
|
|
219
|
+
"size": 331,
|
|
220
|
+
"sha256": "92b2e39e2151b43a2252e10b6d6de876ecaf0008336a4fa1dfe1317b20f1916f",
|
|
221
|
+
"executable": false
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"path": "host/node_modules/better-sqlite3/lib/win32-arm64.js",
|
|
225
|
+
"size": 165,
|
|
226
|
+
"sha256": "00c1d5355a4e47e485e0ea8408a28423a18204d6d7ea5c57e599ebe64a1aa309",
|
|
227
|
+
"executable": false
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"path": "host/node_modules/better-sqlite3/lib/win32-x64.js",
|
|
231
|
+
"size": 163,
|
|
232
|
+
"sha256": "c25867a2e904a367743498377e6e156a653bd10bcc5f9be7cbdf8a28359012ef",
|
|
233
|
+
"executable": false
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"path": "host/node_modules/better-sqlite3/package.json",
|
|
237
|
+
"size": 1838,
|
|
238
|
+
"sha256": "6c9ea355190dfce3646ad4d2a31c9506de36d884a6461b3655a2a0c4ba3d1695",
|
|
239
|
+
"executable": false
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"path": "host/node_modules/better-sqlite3/prebuilds/darwin-arm64.node",
|
|
243
|
+
"size": 1980736,
|
|
244
|
+
"sha256": "98e0e8acd01c632fe5615243e1296af0372826f8783b18fc31c506f73c47459c",
|
|
245
|
+
"executable": false
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"path": "host/node_modules/node-pty/lib/conpty_console_list_agent.js",
|
|
249
|
+
"size": 721,
|
|
250
|
+
"sha256": "0d010879bb6680a0253d44363183d53e631f42972594eb6dcb1fb842c8c85e52",
|
|
251
|
+
"executable": false
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"path": "host/node_modules/node-pty/lib/conpty_console_list_agent.js.map",
|
|
255
|
+
"size": 475,
|
|
256
|
+
"sha256": "e880507e8ebfcaf0fac8ffcb011a3bb3853847767c77bae744ad94ad096977c5",
|
|
257
|
+
"executable": false
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"path": "host/node_modules/node-pty/lib/eventEmitter2.js",
|
|
261
|
+
"size": 1600,
|
|
262
|
+
"sha256": "f1c14613aa90c10def4ca7238329270871997eb26f919f7074dc25533e3e75dd",
|
|
263
|
+
"executable": false
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"path": "host/node_modules/node-pty/lib/eventEmitter2.js.map",
|
|
267
|
+
"size": 1155,
|
|
268
|
+
"sha256": "2300f735c0a048d5b56a2821362f33cc9a811746b8a5b9552854f91a51f52810",
|
|
269
|
+
"executable": false
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"path": "host/node_modules/node-pty/lib/eventEmitter2.test.js",
|
|
273
|
+
"size": 1266,
|
|
274
|
+
"sha256": "9cd06569c14d4cd180031ed4df914b817e75ceb104ac10ef65cae6815f46c568",
|
|
275
|
+
"executable": false
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"path": "host/node_modules/node-pty/lib/eventEmitter2.test.js.map",
|
|
279
|
+
"size": 1396,
|
|
280
|
+
"sha256": "8d3742445dfccf223be42de83015447fbdbcc858a325c061302904f301f503cf",
|
|
281
|
+
"executable": false
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"path": "host/node_modules/node-pty/lib/index.js",
|
|
285
|
+
"size": 2008,
|
|
286
|
+
"sha256": "c1b82c92c4c63aaa8e8441fc5a291c4727cd3f3550666d2fec7250e0f6d4b173",
|
|
287
|
+
"executable": false
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"path": "host/node_modules/node-pty/lib/index.js.map",
|
|
291
|
+
"size": 987,
|
|
292
|
+
"sha256": "829a1a1f145a27eaaf5a636afdedf3ce9746bce25fd489ae04b5721d16f70acc",
|
|
293
|
+
"executable": false
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"path": "host/node_modules/node-pty/lib/interfaces.js",
|
|
297
|
+
"size": 233,
|
|
298
|
+
"sha256": "56e4173f09aad26173f9d4c79800fda0b808c34424f987ef8d671cc931119a0a",
|
|
299
|
+
"executable": false
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"path": "host/node_modules/node-pty/lib/interfaces.js.map",
|
|
303
|
+
"size": 124,
|
|
304
|
+
"sha256": "8ad6939566c34a59f5b7e49307050b73102acce29eed11c12e02fc3d765cc276",
|
|
305
|
+
"executable": false
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"path": "host/node_modules/node-pty/lib/shared/conout.js",
|
|
309
|
+
"size": 348,
|
|
310
|
+
"sha256": "6ae3b0532616da11aa2a11b4506bb89b0d40be005a9ea9fb369fb59eefdbda47",
|
|
311
|
+
"executable": false
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"path": "host/node_modules/node-pty/lib/shared/conout.js.map",
|
|
315
|
+
"size": 204,
|
|
316
|
+
"sha256": "03aeb1e2efe8dc06f069c98bdd30122b2df278f2ac0fbb0a39c91e73801a8eda",
|
|
317
|
+
"executable": false
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"path": "host/node_modules/node-pty/lib/terminal.js",
|
|
321
|
+
"size": 7454,
|
|
322
|
+
"sha256": "5ed5cd66a766afba4a04093284e999f8516d41936501839055800b10eca5d304",
|
|
323
|
+
"executable": false
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"path": "host/node_modules/node-pty/lib/terminal.js.map",
|
|
327
|
+
"size": 5845,
|
|
328
|
+
"sha256": "c9e670bcd71467bd461f9ed969e1e712471f2cd94287543601b7df11ce8c472a",
|
|
329
|
+
"executable": false
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
"path": "host/node_modules/node-pty/lib/terminal.test.js",
|
|
333
|
+
"size": 6250,
|
|
334
|
+
"sha256": "6f6ae435c9c6e93d8146fa7a79fe155ec3291880aa4de68fbad7ed8891e4f87b",
|
|
335
|
+
"executable": false
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"path": "host/node_modules/node-pty/lib/terminal.test.js.map",
|
|
339
|
+
"size": 4151,
|
|
340
|
+
"sha256": "b22c83d59bafc013e5ac5016efb262cff8cbe782b79b064d3ce0f12ce55b41c1",
|
|
341
|
+
"executable": false
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
"path": "host/node_modules/node-pty/lib/testUtils.test.js",
|
|
345
|
+
"size": 807,
|
|
346
|
+
"sha256": "eb13d8ffc04ef385604b37170bafa9914736d5c5be8bca857c9f32958f6fe7ec",
|
|
347
|
+
"executable": false
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"path": "host/node_modules/node-pty/lib/testUtils.test.js.map",
|
|
351
|
+
"size": 622,
|
|
352
|
+
"sha256": "ac8686314d11e1d90b32f5eb7e753bcd4a184ab4441ff12ea2c586a3b58785e6",
|
|
353
|
+
"executable": false
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"path": "host/node_modules/node-pty/lib/types.js",
|
|
357
|
+
"size": 228,
|
|
358
|
+
"sha256": "408bf8287717b6322cc380ea66caf1b5e366dcf697707ae2f3cc454e08f3b151",
|
|
359
|
+
"executable": false
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
"path": "host/node_modules/node-pty/lib/types.js.map",
|
|
363
|
+
"size": 114,
|
|
364
|
+
"sha256": "980a71159075a8183a9a7981ac504e6c277785c33a1fc17eb6908d4abbb128da",
|
|
365
|
+
"executable": false
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"path": "host/node_modules/node-pty/lib/unixTerminal.js",
|
|
369
|
+
"size": 13372,
|
|
370
|
+
"sha256": "a62e3a60c3bc1b0e7261f58284856df748dcee6761a2bc7a5a5ba98b22660473",
|
|
371
|
+
"executable": false
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"path": "host/node_modules/node-pty/lib/unixTerminal.js.map",
|
|
375
|
+
"size": 9657,
|
|
376
|
+
"sha256": "fdc9afe47387e19f74b843cd620c7516895c5c99eba1c1a6aea636f41f9dda2b",
|
|
377
|
+
"executable": false
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"path": "host/node_modules/node-pty/lib/unixTerminal.test.js",
|
|
381
|
+
"size": 19310,
|
|
382
|
+
"sha256": "608d6c9bcfa07873440ed813b499d347e3e79dace1cc58ea3bd61b53356f0937",
|
|
383
|
+
"executable": false
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"path": "host/node_modules/node-pty/lib/unixTerminal.test.js.map",
|
|
387
|
+
"size": 11425,
|
|
388
|
+
"sha256": "44fb7f386894ab2cf5b557ec5cf74ec5417bb75faae608f0f667c365955c5e85",
|
|
389
|
+
"executable": false
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"path": "host/node_modules/node-pty/lib/utils.js",
|
|
393
|
+
"size": 1548,
|
|
394
|
+
"sha256": "f75ad341c13fbf1a9a6605d7ee42dff5bbc5d43b7b381e413fb97eb1b8300beb",
|
|
395
|
+
"executable": false
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
"path": "host/node_modules/node-pty/lib/utils.js.map",
|
|
399
|
+
"size": 1142,
|
|
400
|
+
"sha256": "e699109e178ec671819a99db007389b5b39c3ac31d148ddcb47d9aca250327da",
|
|
401
|
+
"executable": false
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"path": "host/node_modules/node-pty/lib/windowsConoutConnection.js",
|
|
405
|
+
"size": 6119,
|
|
406
|
+
"sha256": "1440f70908fb1f55911ac8e936a1230f68a9c00c03096fcef6788eac6aad9d62",
|
|
407
|
+
"executable": false
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
"path": "host/node_modules/node-pty/lib/windowsConoutConnection.js.map",
|
|
411
|
+
"size": 1660,
|
|
412
|
+
"sha256": "621dd488e7f33a2f2084cdb3d3df6560209105730d54ae3414fbbc3ba34c07c6",
|
|
413
|
+
"executable": false
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
"path": "host/node_modules/node-pty/lib/windowsPtyAgent.js",
|
|
417
|
+
"size": 12388,
|
|
418
|
+
"sha256": "8636d16b38266112204061a22b135734177c242837982fd3a4055be726efa64a",
|
|
419
|
+
"executable": false
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
"path": "host/node_modules/node-pty/lib/windowsPtyAgent.js.map",
|
|
423
|
+
"size": 9105,
|
|
424
|
+
"sha256": "351a491b18e6ada481d318a93be7cc80af63f183e9c66f247f193e8bd4627106",
|
|
425
|
+
"executable": false
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
"path": "host/node_modules/node-pty/lib/windowsPtyAgent.test.js",
|
|
429
|
+
"size": 4147,
|
|
430
|
+
"sha256": "4c83dd76ec446031876dc81869e4c204715f72c0ba7ba3389e10b390b6d08da1",
|
|
431
|
+
"executable": false
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
"path": "host/node_modules/node-pty/lib/windowsPtyAgent.test.js.map",
|
|
435
|
+
"size": 2951,
|
|
436
|
+
"sha256": "1fbfffca813225c86f4a42b3e467a6b3c1a19885db5748d01e8b06d7df82ad94",
|
|
437
|
+
"executable": false
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
"path": "host/node_modules/node-pty/lib/windowsTerminal.js",
|
|
441
|
+
"size": 7852,
|
|
442
|
+
"sha256": "c3a65716f53fed0135a8a633373d5f9c2ab092544d651f27ef0a67096dd3bcd9",
|
|
443
|
+
"executable": false
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"path": "host/node_modules/node-pty/lib/windowsTerminal.js.map",
|
|
447
|
+
"size": 5021,
|
|
448
|
+
"sha256": "ad8425423f7cb4b7c405e7275e02c628e2c9df21287413a7cfce1ffcbb997be8",
|
|
449
|
+
"executable": false
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
"path": "host/node_modules/node-pty/lib/windowsTerminal.test.js",
|
|
453
|
+
"size": 10760,
|
|
454
|
+
"sha256": "325567d8d6b461df3d3b7990a51bac09f662733988df653de7ee9113880e67a3",
|
|
455
|
+
"executable": false
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"path": "host/node_modules/node-pty/lib/windowsTerminal.test.js.map",
|
|
459
|
+
"size": 8847,
|
|
460
|
+
"sha256": "2a3a29c938a8af86827bd1af33a34da1039f36559e68575ae734a07975a956d3",
|
|
461
|
+
"executable": false
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"path": "host/node_modules/node-pty/lib/worker/conoutSocketWorker.js",
|
|
465
|
+
"size": 848,
|
|
466
|
+
"sha256": "3e4bac095ac3870c3248a7302f5d10217de625f30c32b7000fe48a34788e47ac",
|
|
467
|
+
"executable": false
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
"path": "host/node_modules/node-pty/lib/worker/conoutSocketWorker.js.map",
|
|
471
|
+
"size": 635,
|
|
472
|
+
"sha256": "b90f0ea24f182b1be7875070eafc360f91c9d9d5c997815453a117db52fd4250",
|
|
473
|
+
"executable": false
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
"path": "host/node_modules/node-pty/package.json",
|
|
477
|
+
"size": 1615,
|
|
478
|
+
"sha256": "f8b6a14f7022c14f1cd5d109486f5dacd32bffb63a9a63e38eced37dacb47439",
|
|
479
|
+
"executable": false
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
"path": "host/node_modules/node-pty/prebuilds/darwin-arm64/pty.node",
|
|
483
|
+
"size": 85496,
|
|
484
|
+
"sha256": "e6457d66f45af3facd02920a5b212164e80fe0bb758afe6e6eab1eceeba3fc9a",
|
|
485
|
+
"executable": false
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
"path": "host/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper",
|
|
489
|
+
"size": 50480,
|
|
490
|
+
"sha256": "21c589109bca43e287df884f3c34ab888033a83927ea7d273949ac5030583f26",
|
|
491
|
+
"executable": true
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
"path": "host/remote-runtime.json",
|
|
495
|
+
"size": 686,
|
|
496
|
+
"sha256": "cde10fb6b71694b7bc554cd82e6e78a6542b1624368a8e63149c299c07b6e136",
|
|
497
|
+
"executable": false
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"path": "host/schema.sql",
|
|
501
|
+
"size": 4302,
|
|
502
|
+
"sha256": "bf73d90f00b9502f4bd100ed0ed8f843fce96cbcd2dba862d9446bf5ac087db8",
|
|
503
|
+
"executable": false
|
|
504
|
+
}
|
|
505
|
+
]
|
|
506
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# {{APP_NAME}} — a Centralu app
|
|
2
|
+
|
|
3
|
+
This folder is one app. Centralu runs `server.mjs` as an MCP server; people use it through its
|
|
4
|
+
screen (`ui/index.html`) and agents call the same tools as functions. Same tools, one code path.
|
|
5
|
+
|
|
6
|
+
## Files
|
|
7
|
+
|
|
8
|
+
- `centralu.app.json` — the manifest. `id` is `{{APP_ID}}` and must stay equal to this folder's
|
|
9
|
+
name. `home` is the tool Centralu calls to open the screen. Optionally,
|
|
10
|
+
`"view": { "span": { "cols": 2, "rows": 1 } }` recommends how many grid cells the app's panel takes
|
|
11
|
+
on Centralu's grid (each side 1 to 4; a session panel is 1 × 1). It is only a default: the person's
|
|
12
|
+
own choice, from the panel's top bar or in Settings, comes first, and the window may give the panel
|
|
13
|
+
less. The screen must still work at whatever size it gets.
|
|
14
|
+
- `server.mjs` — the MCP server. Change it.
|
|
15
|
+
- `ui/index.html` — the screen. Change it. It is read on every open, so edits show without a restart.
|
|
16
|
+
- `runtime/` — **generated by Centralu. Never edit, format, move, or read it in full.** It is replaced
|
|
17
|
+
when Centralu updates. Everything you need is imported from `./runtime/centralu-app-runtime.mjs`:
|
|
18
|
+
`McpServer`, `serveStdio`, `z` (zod), `centralu`, `inputRequired`, `acceptedContent`.
|
|
19
|
+
|
|
20
|
+
## Rules
|
|
21
|
+
|
|
22
|
+
1. **No installs.** No `npm install`, no `package.json`, no imports other than Node built-ins
|
|
23
|
+
(`node:*`) and the runtime. The app must start with `node server.mjs` alone.
|
|
24
|
+
2. **Tool names** use letters, digits, `_` or `-`. **Never `__`** (two underscores separate names
|
|
25
|
+
in agent sessions; Centralu drops such tools).
|
|
26
|
+
3. **Register tools with `centralu.tool(server, name, config, handler)`** (same arguments as
|
|
27
|
+
`server.registerTool`). The handler then knows which call it is serving, which
|
|
28
|
+
`centralu.agent()` needs.
|
|
29
|
+
4. **Annotate every tool**: `annotations: { readOnlyHint: true }` if it only reads,
|
|
30
|
+
`readOnlyHint: false` if it changes anything. Read-only tools run without asking the person;
|
|
31
|
+
the others follow the session's approval setting. The same hint decides refreshes: every call to
|
|
32
|
+
a tool that is not `readOnlyHint: true` tells this app's open screens to read again (rule 8). A
|
|
33
|
+
read tool left unannotated costs a refresh cycle each time it is called, and screens that re-read
|
|
34
|
+
with it keep refreshing each other.
|
|
35
|
+
5. **Visibility**: by default a tool is visible to agents and to the screen. A tool only the screen
|
|
36
|
+
should call gets `_meta: { ui: { visibility: ['app'] } }`; one only agents should call gets
|
|
37
|
+
`['model']`.
|
|
38
|
+
6. **A tool with a screen** gets `_meta: { ui: { resourceUri: 'ui://{{APP_ID}}/…' } }`, and the
|
|
39
|
+
resource is registered with `centralu.uiResource(server, name, uri, new URL('./ui/…', import.meta.url))`.
|
|
40
|
+
The `home` tool must have one and must be visible to the screen.
|
|
41
|
+
7. **State lives in the server, never in the screen.** Keep it in memory and save it in the data
|
|
42
|
+
folder with `await centralu.readJson(file, fallback)` / `await centralu.writeJson(file, value)`
|
|
43
|
+
(or any file under `centralu.dataDir`). **Never write files into this folder** — a project app's
|
|
44
|
+
folder is committed to git and shared with the team. The screen may not use browser storage
|
|
45
|
+
(it runs in an isolated frame).
|
|
46
|
+
8. **The screen re-reads, it does not remember.** When anyone calls one of this app's tools that
|
|
47
|
+
is not `readOnlyHint: true`, Centralu sends open screens `centralu/notifications/changed` (the
|
|
48
|
+
screen that made the call does not get it: it already has the answer); the template's screen
|
|
49
|
+
then calls `show` again. Keep that handler, and keep `show` read-only.
|
|
50
|
+
9. **stdout is the MCP channel.** `console.log` is redirected to stderr for you; never write to
|
|
51
|
+
`process.stdout` yourself. stderr is shown to the person when the app fails.
|
|
52
|
+
10. **Asking the agent**: inside a tool handler, `await centralu.agent('prompt', { schema, tool })`
|
|
53
|
+
asks the agent of the person using Centralu. Each call runs in a new session under this app
|
|
54
|
+
(the person can read it), with the `safe` approval setting, and returns the agent's final
|
|
55
|
+
answer: text, or with `schema` (a JSON Schema whose top level is an object) JSON of that shape,
|
|
56
|
+
checked by Centralu. Under `safe` the agent reads without asking, but every file write and
|
|
57
|
+
command waits for the person to approve it in that session, so ask the agent for an answer and
|
|
58
|
+
do the writing in your own tool code. Declare `"uses": { "agent": true }` in the manifest for the person's
|
|
59
|
+
default agent, or a list such as `["codex"]` to pick one with `tool`. The prompt reaches the
|
|
60
|
+
agent marked as written by this app, not by the person, so say plainly what you need. A run
|
|
61
|
+
takes seconds to minutes; the helper keeps the call alive while it waits. An app runs one agent
|
|
62
|
+
at a time and at most 5 a minute: put a batch of work into one prompt instead of a loop.
|
|
63
|
+
11. **Calling another app**: inside a tool handler, `await centralu.callApp('other-app', 'tool', args)`
|
|
64
|
+
calls a tool of another app and returns its answer (JSON if the tool returns structured
|
|
65
|
+
content, else text). Declare the app in `"uses": { "apps": ["other-app"] }`. Only tools open to
|
|
66
|
+
agents (visibility `model`) can be called. A project app reaches apps of its own project first,
|
|
67
|
+
then apps in the person's user folder; an app in the user folder reaches only user-folder apps.
|
|
68
|
+
A chain of apps calling apps stops at 3 calls deep, and an app tool already in the chain cannot
|
|
69
|
+
be called again from inside it.
|
|
70
|
+
12. **Reading Centralu's data**: inside a tool handler, `await centralu.host('sessions.list')` or
|
|
71
|
+
`await centralu.host('git.status')` returns JSON. These two names are the whole list; declare
|
|
72
|
+
each one you use in `"uses": { "host": [...] }`. `sessions.list` gives this project's sessions
|
|
73
|
+
(the names shown in the sidebar and their states, never the conversations); `git.status` gives this project's branch and changed
|
|
74
|
+
files (project apps only).
|
|
75
|
+
|
|
76
|
+
All three throw an error that says what Centralu answered. The first time the app uses each of them (an
|
|
77
|
+
agent tool, another app, a host name), Centralu asks the person once — on the session's approval card
|
|
78
|
+
when an agent's call started it, on this app's screen when the screen did — and remembers the answer
|
|
79
|
+
until the manifest's `uses` changes. The call waits while the person decides (up to 5 minutes). A
|
|
80
|
+
refusal comes back as that error: show it plainly instead of retrying.
|
|
81
|
+
|
|
82
|
+
## Dragging an item out of the screen
|
|
83
|
+
|
|
84
|
+
An item the person may want to hand to a session (a card, a row, a record) should be draggable and
|
|
85
|
+
carry two standard types, set in its `dragstart` handler:
|
|
86
|
+
|
|
87
|
+
```js
|
|
88
|
+
node.draggable = true
|
|
89
|
+
node.addEventListener('dragstart', (e) => {
|
|
90
|
+
e.dataTransfer.setData('text/uri-list', item.url) // the item's address
|
|
91
|
+
e.dataTransfer.setData('text/plain', `#${item.id} ${item.title}`) // one line naming it
|
|
92
|
+
e.dataTransfer.effectAllowed = 'copyMove'
|
|
93
|
+
})
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Dropped on a session, it goes into the message at the caret as a Markdown link,
|
|
97
|
+
`[#12 Fix login](https://…)`; with no address, the text goes in as it is. Nothing else is needed:
|
|
98
|
+
the browser does not hand a drag from the screen's frame to Centralu, so Centralu carries it out
|
|
99
|
+
itself. Keep your own types next to these two for drags inside the screen (a card moved between
|
|
100
|
+
columns), and keep the title to one line. If the session cannot use this app's tools (another
|
|
101
|
+
project's session, an untrusted project), the link still goes in and Centralu tells the person why.
|
|
102
|
+
|
|
103
|
+
## The screen's look
|
|
104
|
+
|
|
105
|
+
Centralu sends the person's theme to the screen (light or dark, their colours), and sends it again
|
|
106
|
+
when they switch. The template's `ui/index.html` already uses it; keep these when you change it:
|
|
107
|
+
|
|
108
|
+
- **The `applyTheme` function** in the page script. It puts the theme on `<html>`: `color-scheme`
|
|
109
|
+
from `theme`, the MCP Apps style variables (`--color-text-primary`, `--color-background-secondary`,
|
|
110
|
+
`--font-sans`, `--font-text-md-size`, `--border-radius-md`, …) and Centralu's own
|
|
111
|
+
(`--centralu-signal`, `--centralu-scrollbar-*`). It reads `app.getHostContext()`, because a change
|
|
112
|
+
notification carries only what changed.
|
|
113
|
+
- **Style with those variables only** — colours, and type and shape too (`--font-text-md-size`,
|
|
114
|
+
`--font-text-md-line-height`, `--font-sans`, `--font-weight-semibold`, `--border-radius-md`,
|
|
115
|
+
`--border-width-regular`, …) — instead of fixed values. Give each its fallback once, in the
|
|
116
|
+
`:root` block at the top of the stylesheet (Centralu's dark values, for the moment before the theme
|
|
117
|
+
arrives), and use those names everywhere below. Then the screen follows light and dark, the
|
|
118
|
+
person's font, line height and text size, and sits on Centralu's background (keep
|
|
119
|
+
`background: transparent` on the page). Spacing has no variable; keep it literal. The roles: `primary` / `secondary` / `tertiary` for
|
|
120
|
+
text and surfaces in falling order; `--color-text-danger` for errors; `--color-text-warning` (the
|
|
121
|
+
same as `--centralu-signal`) only for what waits on the person — it is Centralu's signal colour,
|
|
122
|
+
the strongest thing on screen.
|
|
123
|
+
- **Narrow first.** The screen is often a grid panel about 360–480px wide, or the inline view under
|
|
124
|
+
a tool card. Make it work at that width first: no fixed width over about 320px, rows that wrap
|
|
125
|
+
(`flex-wrap`), and below about 520px side-by-side parts stacked into one column (a media query in
|
|
126
|
+
this page measures the panel). Keep what waits on the person first. Check it at 360px.
|
|
127
|
+
- **The "Centralu's scrollbar" block** in the stylesheet. It draws scrollbars the way Centralu
|
|
128
|
+
does, from the theme. Do not add `scrollbar-color` or `scrollbar-width` outside its `@supports`
|
|
129
|
+
guard: in Chromium they switch the styled scrollbar off.
|
|
130
|
+
|
|
131
|
+
## Checking your work
|
|
132
|
+
|
|
133
|
+
- Call Centralu's **`check`** tool after changes. It validates the manifest, starts the app, lists
|
|
134
|
+
its tools for real, reads every screen the tools point to, and reports problems (tool names,
|
|
135
|
+
visibility, missing annotations, a `home` without a screen) with the app's stderr.
|
|
136
|
+
- Centralu restarts the app once at the end of your turn if this folder changed; calls in progress
|
|
137
|
+
finish first. Agents in other sessions see changed tools from their next turn (Claude) or next
|
|
138
|
+
thread (Codex).
|
|
139
|
+
- Errors in `server.mjs` are printed with file and line. A failure inside `runtime/` is almost always
|
|
140
|
+
a wrong argument from `server.mjs` — look at the first frame outside `runtime/`.
|