@rubytech/create-maxy-code 0.1.506 → 0.1.507
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/payload/platform/config/brand.json +79 -18
- package/payload/platform/lib/account-schema-regions/dist/index.d.ts +17 -5
- package/payload/platform/lib/account-schema-regions/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/account-schema-regions/dist/index.js +20 -6
- package/payload/platform/lib/account-schema-regions/dist/index.js.map +1 -1
- package/payload/platform/lib/account-schema-regions/src/index.ts +20 -6
- package/payload/platform/plugins/admin/PLUGIN.md +36 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +48 -2
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +7 -0
- package/payload/platform/plugins/aeo/PLUGIN.md +3 -0
- package/payload/platform/plugins/browser/PLUGIN.md +18 -0
- package/payload/platform/plugins/connector/PLUGIN.md +4 -0
- package/payload/platform/plugins/contacts/PLUGIN.md +9 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +21 -1
- package/payload/platform/plugins/docs/references/plugins-guide.md +26 -0
- package/payload/platform/plugins/email/PLUGIN.md +17 -0
- package/payload/platform/plugins/filesystem/PLUGIN.md +6 -0
- package/payload/platform/plugins/google/PLUGIN.md +12 -0
- package/payload/platform/plugins/graph/PLUGIN.md +3 -0
- package/payload/platform/plugins/graph-viewer/PLUGIN.md +1 -0
- package/payload/platform/plugins/ledger/PLUGIN.md +7 -0
- package/payload/platform/plugins/memory/PLUGIN.md +41 -0
- package/payload/platform/plugins/outlook/PLUGIN.md +24 -0
- package/payload/platform/plugins/quickbooks/PLUGIN.md +15 -0
- package/payload/platform/plugins/replicate/PLUGIN.md +3 -0
- package/payload/platform/plugins/scheduling/PLUGIN.md +10 -0
- package/payload/platform/plugins/storage-broker/PLUGIN.md +12 -0
- package/payload/platform/plugins/telegram/PLUGIN.md +3 -0
- package/payload/platform/plugins/url-get/PLUGIN.md +1 -0
- package/payload/platform/plugins/voice-mirror/PLUGIN.md +5 -0
- package/payload/platform/plugins/whatsapp/PLUGIN.md +12 -0
- package/payload/platform/plugins/work/PLUGIN.md +15 -0
- package/payload/platform/plugins/workflows/PLUGIN.md +8 -0
- package/payload/platform/scripts/check-risk-class.mjs +145 -0
- package/payload/platform/scripts/lib/__pycache__/account-schema-owned-dirs.cpython-314.pyc +0 -0
- package/payload/platform/scripts/lib/provision-account-dir.sh +4 -1
- 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 +4 -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 +8 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts +13 -0
- package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js +33 -8
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -1
- package/payload/server/{chunk-5ADBNEJA.js → chunk-2WAXM5N2.js} +111 -111
- package/payload/server/maxy-edge.js +1 -1
- package/payload/server/public/activity.html +5 -5
- package/payload/server/public/agents.html +4 -4
- package/payload/server/public/assets/{AdminLoginScreens-D5KOQA8S.js → AdminLoginScreens-YT7jsh_H.js} +1 -1
- package/payload/server/public/assets/{AdminShell-C8wazpnz.js → AdminShell-Ckht9hmU.js} +1 -1
- package/payload/server/public/assets/{activity-CFqkDhTs.js → activity-DH3Wgc3O.js} +1 -1
- package/payload/server/public/assets/admin-DetvulAu.js +1 -0
- package/payload/server/public/assets/{agents-DPulfmrd.js → agents-X_IvDHLZ.js} +1 -1
- package/payload/server/public/assets/{browser-T_5xbnJh.js → browser-Bym8QhfA.js} +1 -1
- package/payload/server/public/assets/{calendar-CKjuiG8c.js → calendar-CFnufJOy.js} +1 -1
- package/payload/server/public/assets/chat-wrckyIpw.js +1 -0
- package/payload/server/public/assets/chevron-left-Dtk3jEK5.js +1 -0
- package/payload/server/public/assets/chevron-right-Dih6IZ8B.js +1 -0
- package/payload/server/public/assets/clock-iJCrrmWM.js +1 -0
- package/payload/server/public/assets/data-D76--TYs.js +1 -0
- package/payload/server/public/assets/{file-text-c6cA4Evd.js → file-text-zch0E1GJ.js} +1 -1
- package/payload/server/public/assets/{graph-DIk-o45J.js → graph-BavHLzpV.js} +1 -1
- package/payload/server/public/assets/{graph-labels-5bjxhC_p.js → graph-labels-CBwh4g-6.js} +1 -1
- package/payload/server/public/assets/{maximize-2-BCQkFb1_.js → maximize-2-bTn_Ozpi.js} +1 -1
- package/payload/server/public/assets/{operator-0UnNo2ms.js → operator-a4IOwf62.js} +1 -1
- package/payload/server/public/assets/page-3T2mE63b.js +1 -0
- package/payload/server/public/assets/{page-HVtUfub2.js → page-D6M1CmPe.js} +4 -4
- package/payload/server/public/assets/{public-CKEYyIPn.js → public-B3y_YU1G.js} +1 -1
- package/payload/server/public/assets/{rotate-ccw-dTpO5dhL.js → rotate-ccw-BGvzNB1b.js} +1 -1
- package/payload/server/public/assets/{routines-C6P1-Dto.js → routines-C7Dr16am.js} +1 -1
- package/payload/server/public/assets/{skills-ClrpVqlz.js → skills-DFeb3XO3.js} +1 -1
- package/payload/server/public/assets/{tasks-C8SNhSFC.js → tasks-CSfnCKJe.js} +1 -1
- package/payload/server/public/assets/{time-entry-format-CCO6N6XZ.js → time-entry-format-BgZqOOqG.js} +1 -1
- package/payload/server/public/assets/{triangle-alert-CHjdKpag.js → triangle-alert-DBJ7xz_t.js} +1 -1
- package/payload/server/public/assets/{useCopyFeedback-BTUu3-l8.js → useCopyFeedback-BFOujMl-.js} +1 -1
- package/payload/server/public/assets/useSubAccountSwitcher-BkQ5tA8A.css +1 -0
- package/payload/server/public/assets/{useVoiceRecorder-BeNqxmm2.js → useVoiceRecorder-BP6CpYQD.js} +1 -1
- package/payload/server/public/assets/{wrench-CeNnc7oO.js → wrench-DdaRhfzS.js} +1 -1
- package/payload/server/public/brand/fonts/inter-400.woff2 +0 -0
- package/payload/server/public/brand/fonts/inter-500.woff2 +0 -0
- package/payload/server/public/brand-defaults.css +47 -4
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +7 -7
- package/payload/server/public/chat.html +13 -13
- package/payload/server/public/data.html +11 -11
- package/payload/server/public/graph.html +9 -9
- package/payload/server/public/index.html +14 -14
- package/payload/server/public/operator.html +14 -14
- package/payload/server/public/public.html +13 -13
- package/payload/server/public/routines.html +6 -6
- package/payload/server/public/skills.html +5 -5
- package/payload/server/public/tasks.html +6 -6
- package/payload/server/server.js +702 -586
- package/payload/server/public/assets/admin-B-EGUWS4.js +0 -1
- package/payload/server/public/assets/chat-DWLYAA70.js +0 -1
- package/payload/server/public/assets/chevron-left-DBMCTKlT.js +0 -1
- package/payload/server/public/assets/chevron-right-SBAr6zzc.js +0 -1
- package/payload/server/public/assets/clock-kkzt7Scf.js +0 -1
- package/payload/server/public/assets/data-CV8N9qcy.js +0 -1
- package/payload/server/public/assets/page-JJa2xdzf.js +0 -1
- package/payload/server/public/assets/useSubAccountSwitcher-DyrH8DA8.css +0 -1
- /package/payload/server/public/assets/{useSubAccountSwitcher-DSW9vDi2.js → useSubAccountSwitcher-0PfRrN6i.js} +0 -0
|
@@ -5,33 +5,43 @@ tools:
|
|
|
5
5
|
- name: schedule-event
|
|
6
6
|
publicAllowlist: false
|
|
7
7
|
adminAllowlist: false
|
|
8
|
+
riskClass: write_local
|
|
8
9
|
- name: schedule-list
|
|
9
10
|
publicAllowlist: false
|
|
10
11
|
adminAllowlist: false
|
|
12
|
+
riskClass: read
|
|
11
13
|
- name: schedule-get
|
|
12
14
|
publicAllowlist: false
|
|
13
15
|
adminAllowlist: false
|
|
16
|
+
riskClass: read
|
|
14
17
|
- name: schedule-update
|
|
15
18
|
publicAllowlist: false
|
|
16
19
|
adminAllowlist: false
|
|
20
|
+
riskClass: write_local
|
|
17
21
|
- name: schedule-cancel
|
|
18
22
|
publicAllowlist: false
|
|
19
23
|
adminAllowlist: false
|
|
24
|
+
riskClass: write_local
|
|
20
25
|
- name: schedule-export-ics
|
|
21
26
|
publicAllowlist: false
|
|
22
27
|
adminAllowlist: false
|
|
28
|
+
riskClass: write_local
|
|
23
29
|
- name: schedule-import-ics
|
|
24
30
|
publicAllowlist: false
|
|
25
31
|
adminAllowlist: false
|
|
32
|
+
riskClass: write_local
|
|
26
33
|
- name: schedule-archive-ics
|
|
27
34
|
publicAllowlist: false
|
|
28
35
|
adminAllowlist: false
|
|
36
|
+
riskClass: write_local
|
|
29
37
|
- name: schedule-connector-busy-sync
|
|
30
38
|
publicAllowlist: false
|
|
31
39
|
adminAllowlist: false
|
|
40
|
+
riskClass: write_local
|
|
32
41
|
- name: time-resolve
|
|
33
42
|
publicAllowlist: false
|
|
34
43
|
adminAllowlist: true
|
|
44
|
+
riskClass: read
|
|
35
45
|
skills:
|
|
36
46
|
- skills/daily-prep/SKILL.md
|
|
37
47
|
- skills/briefing/SKILL.md
|
|
@@ -6,39 +6,51 @@ tools:
|
|
|
6
6
|
- name: storage-d1-list
|
|
7
7
|
publicAllowlist: false
|
|
8
8
|
adminAllowlist: true
|
|
9
|
+
riskClass: read
|
|
9
10
|
- name: storage-d1-create
|
|
10
11
|
publicAllowlist: false
|
|
11
12
|
adminAllowlist: true
|
|
13
|
+
riskClass: external
|
|
12
14
|
- name: storage-d1-query
|
|
13
15
|
publicAllowlist: false
|
|
14
16
|
adminAllowlist: true
|
|
17
|
+
riskClass: external
|
|
15
18
|
- name: storage-r2-bucket-list
|
|
16
19
|
publicAllowlist: false
|
|
17
20
|
adminAllowlist: true
|
|
21
|
+
riskClass: read
|
|
18
22
|
- name: storage-r2-bucket-create
|
|
19
23
|
publicAllowlist: false
|
|
20
24
|
adminAllowlist: true
|
|
25
|
+
riskClass: external
|
|
21
26
|
- name: storage-r2-object-list
|
|
22
27
|
publicAllowlist: false
|
|
23
28
|
adminAllowlist: true
|
|
29
|
+
riskClass: read
|
|
24
30
|
- name: storage-r2-object-get
|
|
25
31
|
publicAllowlist: false
|
|
26
32
|
adminAllowlist: true
|
|
33
|
+
riskClass: read
|
|
27
34
|
- name: storage-r2-object-put
|
|
28
35
|
publicAllowlist: false
|
|
29
36
|
adminAllowlist: true
|
|
37
|
+
riskClass: external
|
|
30
38
|
- name: storage-r2-object-delete
|
|
31
39
|
publicAllowlist: false
|
|
32
40
|
adminAllowlist: true
|
|
41
|
+
riskClass: external
|
|
33
42
|
- name: storage-pages-create
|
|
34
43
|
publicAllowlist: false
|
|
35
44
|
adminAllowlist: true
|
|
45
|
+
riskClass: external
|
|
36
46
|
- name: storage-pages-deploy
|
|
37
47
|
publicAllowlist: false
|
|
38
48
|
adminAllowlist: true
|
|
49
|
+
riskClass: external
|
|
39
50
|
- name: storage-pages-adopt
|
|
40
51
|
publicAllowlist: false
|
|
41
52
|
adminAllowlist: true
|
|
53
|
+
riskClass: external
|
|
42
54
|
metadata: {"platform":{"embed":["admin"]}}
|
|
43
55
|
mcp:
|
|
44
56
|
command: node
|
|
@@ -6,12 +6,15 @@ tools:
|
|
|
6
6
|
- name: message
|
|
7
7
|
publicAllowlist: false
|
|
8
8
|
adminAllowlist: false
|
|
9
|
+
riskClass: external
|
|
9
10
|
- name: message-history
|
|
10
11
|
publicAllowlist: false
|
|
11
12
|
adminAllowlist: false
|
|
13
|
+
riskClass: read
|
|
12
14
|
- name: telegram-webhook-register
|
|
13
15
|
publicAllowlist: false
|
|
14
16
|
adminAllowlist: false
|
|
17
|
+
riskClass: external
|
|
15
18
|
mcp:
|
|
16
19
|
command: node
|
|
17
20
|
args:
|
|
@@ -7,18 +7,23 @@ tools:
|
|
|
7
7
|
- name: voice-tag-content
|
|
8
8
|
publicAllowlist: false
|
|
9
9
|
adminAllowlist: true
|
|
10
|
+
riskClass: write_local
|
|
10
11
|
- name: voice-distil-profile
|
|
11
12
|
publicAllowlist: false
|
|
12
13
|
adminAllowlist: true
|
|
14
|
+
riskClass: write_local
|
|
13
15
|
- name: voice-retrieve-conditioning
|
|
14
16
|
publicAllowlist: false
|
|
15
17
|
adminAllowlist: false
|
|
18
|
+
riskClass: read
|
|
16
19
|
- name: voice-record-feedback
|
|
17
20
|
publicAllowlist: false
|
|
18
21
|
adminAllowlist: true
|
|
22
|
+
riskClass: write_local
|
|
19
23
|
- name: voice-ingest-session-text
|
|
20
24
|
publicAllowlist: false
|
|
21
25
|
adminAllowlist: true
|
|
26
|
+
riskClass: write_local
|
|
22
27
|
mcp:
|
|
23
28
|
command: node
|
|
24
29
|
args:
|
|
@@ -5,39 +5,51 @@ tools:
|
|
|
5
5
|
- name: whatsapp-login-start
|
|
6
6
|
publicAllowlist: false
|
|
7
7
|
adminAllowlist: false
|
|
8
|
+
riskClass: external
|
|
8
9
|
- name: whatsapp-login-wait
|
|
9
10
|
publicAllowlist: false
|
|
10
11
|
adminAllowlist: false
|
|
12
|
+
riskClass: external
|
|
11
13
|
- name: whatsapp-status
|
|
12
14
|
publicAllowlist: false
|
|
13
15
|
adminAllowlist: false
|
|
16
|
+
riskClass: read
|
|
14
17
|
- name: whatsapp-disconnect
|
|
15
18
|
publicAllowlist: false
|
|
16
19
|
adminAllowlist: false
|
|
20
|
+
riskClass: external
|
|
17
21
|
- name: whatsapp-config
|
|
18
22
|
publicAllowlist: false
|
|
19
23
|
adminAllowlist: false
|
|
24
|
+
riskClass: write_local
|
|
20
25
|
- name: whatsapp-activity
|
|
21
26
|
publicAllowlist: false
|
|
22
27
|
adminAllowlist: false
|
|
28
|
+
riskClass: read
|
|
23
29
|
- name: whatsapp-conversations
|
|
24
30
|
publicAllowlist: false
|
|
25
31
|
adminAllowlist: false
|
|
32
|
+
riskClass: read
|
|
26
33
|
- name: whatsapp-messages
|
|
27
34
|
publicAllowlist: false
|
|
28
35
|
adminAllowlist: false
|
|
36
|
+
riskClass: read
|
|
29
37
|
- name: whatsapp-conversation-graph-state
|
|
30
38
|
publicAllowlist: false
|
|
31
39
|
adminAllowlist: false
|
|
40
|
+
riskClass: read
|
|
32
41
|
- name: whatsapp-group-info
|
|
33
42
|
publicAllowlist: false
|
|
34
43
|
adminAllowlist: false
|
|
44
|
+
riskClass: read
|
|
35
45
|
- name: whatsapp-send-admin
|
|
36
46
|
publicAllowlist: false
|
|
37
47
|
adminAllowlist: false
|
|
48
|
+
riskClass: external
|
|
38
49
|
- name: whatsapp-reply
|
|
39
50
|
publicAllowlist: false
|
|
40
51
|
adminAllowlist: false
|
|
52
|
+
riskClass: external
|
|
41
53
|
metadata: {"platform":{"embed":["admin"]}}
|
|
42
54
|
mcp:
|
|
43
55
|
command: node
|
|
@@ -5,48 +5,63 @@ tools:
|
|
|
5
5
|
- name: work-create
|
|
6
6
|
publicAllowlist: false
|
|
7
7
|
adminAllowlist: false
|
|
8
|
+
riskClass: write_local
|
|
8
9
|
- name: work-update
|
|
9
10
|
publicAllowlist: false
|
|
10
11
|
adminAllowlist: false
|
|
12
|
+
riskClass: write_local
|
|
11
13
|
- name: work-list
|
|
12
14
|
publicAllowlist: false
|
|
13
15
|
adminAllowlist: false
|
|
16
|
+
riskClass: read
|
|
14
17
|
- name: work-get
|
|
15
18
|
publicAllowlist: false
|
|
16
19
|
adminAllowlist: false
|
|
20
|
+
riskClass: read
|
|
17
21
|
- name: work-relate
|
|
18
22
|
publicAllowlist: false
|
|
19
23
|
adminAllowlist: false
|
|
24
|
+
riskClass: write_local
|
|
20
25
|
- name: work-complete
|
|
21
26
|
publicAllowlist: false
|
|
22
27
|
adminAllowlist: false
|
|
28
|
+
riskClass: write_local
|
|
23
29
|
- name: work-ready
|
|
24
30
|
publicAllowlist: false
|
|
25
31
|
adminAllowlist: false
|
|
32
|
+
riskClass: read
|
|
26
33
|
- name: session-list
|
|
27
34
|
publicAllowlist: false
|
|
28
35
|
adminAllowlist: false
|
|
36
|
+
riskClass: read
|
|
29
37
|
- name: session-name
|
|
30
38
|
publicAllowlist: false
|
|
31
39
|
adminAllowlist: false
|
|
40
|
+
riskClass: write_local
|
|
32
41
|
- name: session-metering
|
|
33
42
|
publicAllowlist: false
|
|
34
43
|
adminAllowlist: false
|
|
44
|
+
riskClass: read
|
|
35
45
|
- name: project-create
|
|
36
46
|
publicAllowlist: false
|
|
37
47
|
adminAllowlist: false
|
|
48
|
+
riskClass: write_local
|
|
38
49
|
- name: project-list
|
|
39
50
|
publicAllowlist: false
|
|
40
51
|
adminAllowlist: false
|
|
52
|
+
riskClass: read
|
|
41
53
|
- name: project-get
|
|
42
54
|
publicAllowlist: false
|
|
43
55
|
adminAllowlist: false
|
|
56
|
+
riskClass: read
|
|
44
57
|
- name: project-update
|
|
45
58
|
publicAllowlist: false
|
|
46
59
|
adminAllowlist: false
|
|
60
|
+
riskClass: write_local
|
|
47
61
|
- name: project-complete
|
|
48
62
|
publicAllowlist: false
|
|
49
63
|
adminAllowlist: false
|
|
64
|
+
riskClass: write_local
|
|
50
65
|
metadata: {"platform":{"always":false,"embed":[],"pluginKey":"work"}}
|
|
51
66
|
skills:
|
|
52
67
|
- skills/execute-task/SKILL.md
|
|
@@ -5,27 +5,35 @@ tools:
|
|
|
5
5
|
- name: workflow-create
|
|
6
6
|
publicAllowlist: false
|
|
7
7
|
adminAllowlist: false
|
|
8
|
+
riskClass: write_local
|
|
8
9
|
- name: workflow-list
|
|
9
10
|
publicAllowlist: false
|
|
10
11
|
adminAllowlist: false
|
|
12
|
+
riskClass: read
|
|
11
13
|
- name: workflow-get
|
|
12
14
|
publicAllowlist: false
|
|
13
15
|
adminAllowlist: false
|
|
16
|
+
riskClass: read
|
|
14
17
|
- name: workflow-update
|
|
15
18
|
publicAllowlist: false
|
|
16
19
|
adminAllowlist: false
|
|
20
|
+
riskClass: write_local
|
|
17
21
|
- name: workflow-delete
|
|
18
22
|
publicAllowlist: false
|
|
19
23
|
adminAllowlist: false
|
|
24
|
+
riskClass: write_local
|
|
20
25
|
- name: workflow-validate
|
|
21
26
|
publicAllowlist: false
|
|
22
27
|
adminAllowlist: false
|
|
28
|
+
riskClass: read
|
|
23
29
|
- name: workflow-execute
|
|
24
30
|
publicAllowlist: false
|
|
25
31
|
adminAllowlist: false
|
|
32
|
+
riskClass: exec
|
|
26
33
|
- name: workflow-runs
|
|
27
34
|
publicAllowlist: false
|
|
28
35
|
adminAllowlist: false
|
|
36
|
+
riskClass: read
|
|
29
37
|
metadata: {"platform":{"always":false,"embed":[],"pluginKey":"workflows"}}
|
|
30
38
|
mcp:
|
|
31
39
|
command: node
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Publish-time gate: flag any `riskClass` declaration that contradicts what the
|
|
3
|
+
// tool's own name says it does.
|
|
4
|
+
//
|
|
5
|
+
// The session manager throws at boot when a riskClass is absent or off-enum
|
|
6
|
+
// (tool-surface.ts 'risk-class-missing' / 'risk-class-invalid'). It cannot
|
|
7
|
+
// catch a class that is present, valid, and wrong — `whatsapp-send` declared
|
|
8
|
+
// `read` parses fine, logs nothing, and stays invisible until a downstream
|
|
9
|
+
// gate acts on it. That is a no-event failure, so it needs a standing check
|
|
10
|
+
// rather than an event.
|
|
11
|
+
//
|
|
12
|
+
// The gate reports; it never rewrites a declaration. A contradiction is
|
|
13
|
+
// resolved either by correcting the manifest or by adding a named exception
|
|
14
|
+
// below with the reason it is not a mistake. An exception whose tool no longer
|
|
15
|
+
// contradicts is itself reported: a suppression that outlives its cause
|
|
16
|
+
// re-creates the blind spot the gate exists to remove.
|
|
17
|
+
|
|
18
|
+
import { readFileSync, readdirSync, statSync, existsSync } from 'node:fs'
|
|
19
|
+
import { dirname, join, resolve } from 'node:path'
|
|
20
|
+
import { fileURLToPath } from 'node:url'
|
|
21
|
+
|
|
22
|
+
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
23
|
+
const MAXY_CODE_ROOT = resolve(__dirname, '..', '..')
|
|
24
|
+
|
|
25
|
+
const PLUGIN_ROOTS = [
|
|
26
|
+
{ root: join(MAXY_CODE_ROOT, 'platform', 'plugins'), depth: 1 },
|
|
27
|
+
{ root: join(MAXY_CODE_ROOT, 'premium-plugins'), depth: 1 },
|
|
28
|
+
{ root: join(MAXY_CODE_ROOT, 'premium-plugins'), depth: 2, mid: 'plugins' },
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
// A name that says the call sends something outward, declared as if it stays
|
|
32
|
+
// on the device.
|
|
33
|
+
const OUTWARD_SIGNAL = /-(send|reply|publish|deploy|delete|post)\b/
|
|
34
|
+
const OUTWARD_CONTRADICTS = new Set(['read', 'write_local'])
|
|
35
|
+
|
|
36
|
+
// A name that says the call only looks at something, declared as if it acts.
|
|
37
|
+
const INWARD_SIGNAL = /-(read|list|search|status|info|get)\b/
|
|
38
|
+
const INWARD_CONTRADICTS = new Set(['external', 'exec'])
|
|
39
|
+
|
|
40
|
+
/** Named exceptions. Each entry suppresses exactly one tool+class pair and
|
|
41
|
+
* must carry the reason the name signal is misleading for that tool. */
|
|
42
|
+
const EXCEPTIONS = [
|
|
43
|
+
{
|
|
44
|
+
tool: 'joblogic-job-set-status',
|
|
45
|
+
riskClass: 'external',
|
|
46
|
+
reason: 'The -status suffix reads as a query, but this sets a job status on the remote JobLogic tenant. external is correct and the name signal is what is wrong here.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
tool: 'memory-delete',
|
|
50
|
+
riskClass: 'write_local',
|
|
51
|
+
reason: 'Soft-deletes a node in the local Neo4j graph. Trashed nodes still resolve by elementId; nothing leaves the device.',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
tool: 'contact-delete',
|
|
55
|
+
riskClass: 'write_local',
|
|
56
|
+
reason: 'Removes a contact from the local graph. No remote address book is touched.',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
tool: 'profile-delete',
|
|
60
|
+
riskClass: 'write_local',
|
|
61
|
+
reason: 'Removes a profile node from the local graph.',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
tool: 'workflow-delete',
|
|
65
|
+
riskClass: 'write_local',
|
|
66
|
+
reason: 'Removes a workflow definition from the local graph. Any run history it produced is untouched.',
|
|
67
|
+
},
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
function collectPluginDirs() {
|
|
71
|
+
const dirs = []
|
|
72
|
+
for (const spec of PLUGIN_ROOTS) {
|
|
73
|
+
if (!existsSync(spec.root)) continue
|
|
74
|
+
for (const entry of readdirSync(spec.root)) {
|
|
75
|
+
if (entry.startsWith('.')) continue
|
|
76
|
+
const lvl1 = join(spec.root, entry)
|
|
77
|
+
if (!statSync(lvl1).isDirectory()) continue
|
|
78
|
+
if (spec.depth === 1) {
|
|
79
|
+
dirs.push(lvl1)
|
|
80
|
+
continue
|
|
81
|
+
}
|
|
82
|
+
const mid = join(lvl1, spec.mid)
|
|
83
|
+
if (!existsSync(mid) || !statSync(mid).isDirectory()) continue
|
|
84
|
+
for (const sub of readdirSync(mid)) {
|
|
85
|
+
if (sub.startsWith('.')) continue
|
|
86
|
+
const lvl2 = join(mid, sub)
|
|
87
|
+
if (statSync(lvl2).isDirectory()) dirs.push(lvl2)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return dirs
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Independent of tool-surface.ts on purpose: a gate that shares the parser it
|
|
95
|
+
* is checking cannot detect that parser drifting. */
|
|
96
|
+
function declaredTools(manifestPath) {
|
|
97
|
+
const out = []
|
|
98
|
+
let current = null
|
|
99
|
+
let inTools = false
|
|
100
|
+
for (const line of readFileSync(manifestPath, 'utf8').split(/\r?\n/)) {
|
|
101
|
+
if (/^tools:\s*$/.test(line)) { inTools = true; continue }
|
|
102
|
+
if (inTools && /^[A-Za-z_]/.test(line)) inTools = false
|
|
103
|
+
if (!inTools) continue
|
|
104
|
+
const name = line.match(/^\s+-\s+name:\s*(.+?)\s*$/)
|
|
105
|
+
if (name) { current = name[1]; continue }
|
|
106
|
+
const risk = line.match(/^\s+riskClass:\s*(.+?)\s*$/)
|
|
107
|
+
if (risk && current) { out.push({ tool: current, riskClass: risk[1].trim() }); current = null }
|
|
108
|
+
}
|
|
109
|
+
return out
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const contradictions = []
|
|
113
|
+
const matchedExceptions = new Set()
|
|
114
|
+
let scanned = 0
|
|
115
|
+
|
|
116
|
+
for (const dir of collectPluginDirs()) {
|
|
117
|
+
const manifest = join(dir, 'PLUGIN.md')
|
|
118
|
+
if (!existsSync(manifest)) continue
|
|
119
|
+
for (const { tool, riskClass } of declaredTools(manifest)) {
|
|
120
|
+
scanned++
|
|
121
|
+
let signal = null
|
|
122
|
+
if (OUTWARD_SIGNAL.test(tool) && OUTWARD_CONTRADICTS.has(riskClass)) signal = 'outward-name'
|
|
123
|
+
if (INWARD_SIGNAL.test(tool) && INWARD_CONTRADICTS.has(riskClass)) signal = 'inward-name'
|
|
124
|
+
if (!signal) continue
|
|
125
|
+
const excepted = EXCEPTIONS.find((e) => e.tool === tool && e.riskClass === riskClass)
|
|
126
|
+
if (excepted) { matchedExceptions.add(`${tool}:${riskClass}`); continue }
|
|
127
|
+
contradictions.push({ tool, riskClass, signal, plugin: dir.replace(`${MAXY_CODE_ROOT}/`, '') })
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const stale = EXCEPTIONS.filter((e) => !matchedExceptions.has(`${e.tool}:${e.riskClass}`))
|
|
132
|
+
|
|
133
|
+
for (const c of contradictions) {
|
|
134
|
+
console.error(`[risk-class] contradiction tool=${c.tool} declared=${c.riskClass} signal=${c.signal} plugin=${c.plugin}`)
|
|
135
|
+
}
|
|
136
|
+
for (const s of stale) {
|
|
137
|
+
console.error(`[risk-class] stale-exception tool=${s.tool} riskClass=${s.riskClass} — no longer contradicts; remove it from EXCEPTIONS`)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (contradictions.length > 0 || stale.length > 0) {
|
|
141
|
+
console.error(`[gate] check-risk-class: FAIL (${contradictions.length} contradiction(s), ${stale.length} stale exception(s), ${scanned} tools scanned)`)
|
|
142
|
+
process.exit(1)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
console.log(`[gate] check-risk-class: PASS (${scanned} tools scanned, ${EXCEPTIONS.length} named exception(s))`)
|
|
Binary file
|
|
@@ -29,7 +29,10 @@ provision_account_dir() {
|
|
|
29
29
|
# Operator-data buckets (entity-anchored, flat) + tool-owned dirs. agents/ and
|
|
30
30
|
# specialists/ are created above. The seeded SCHEMA.md is the single source of
|
|
31
31
|
# the allowed top-level set, parsed at runtime by the fs-schema write guard.
|
|
32
|
-
|
|
32
|
+
# `sites` joins the seed set because it is a home bucket in the /data browser
|
|
33
|
+
# (HOME_FIXED); an unseeded home bucket is reported by the standing
|
|
34
|
+
# home-parity audit as missing on every account that has not published a site.
|
|
35
|
+
local _seed_dirs=(projects contacts documents url-get output generated extracted uploads sites)
|
|
33
36
|
local _d _seeded=0
|
|
34
37
|
for _d in "${_seed_dirs[@]}"; do
|
|
35
38
|
[ -d "$ACCOUNT_DIR/$_d" ] || { mkdir -p "$ACCOUNT_DIR/$_d" && _seeded=$((_seeded+1)); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1343,6 +1343,10 @@ export function buildHttpApp(deps) {
|
|
|
1343
1343
|
sessionId: row.sessionId,
|
|
1344
1344
|
live: row.state === 'live',
|
|
1345
1345
|
status: row.status,
|
|
1346
|
+
// Task 1997 — the account this row belongs to, so an SSE consumer can
|
|
1347
|
+
// scope its fan-out instead of broadcasting install-wide. Already on
|
|
1348
|
+
// the row (Task 1769); it was simply never put on the wire.
|
|
1349
|
+
accountId: row.accountId,
|
|
1346
1350
|
agentLabel,
|
|
1347
1351
|
cwd: row.cwd,
|
|
1348
1352
|
firstPrompt,
|