@velanir/openclaw-participation-gate 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,156 @@
1
+ {
2
+ "id": "velanir-participation-gate",
3
+ "activation": {
4
+ "onStartup": true
5
+ },
6
+ "name": "Velanir Participation Gate",
7
+ "description": "Decides whether a digital coworker should respond in group and channel conversations before the main agent runs.",
8
+ "configSchema": {
9
+ "type": "object",
10
+ "additionalProperties": false,
11
+ "properties": {
12
+ "mode": {
13
+ "type": "string",
14
+ "enum": ["shadow", "enforce"],
15
+ "default": "shadow"
16
+ },
17
+ "classifier": {
18
+ "type": "object",
19
+ "additionalProperties": false,
20
+ "properties": {
21
+ "provider": { "type": "string", "minLength": 1 },
22
+ "model": { "type": "string", "minLength": 1 },
23
+ "authProfileId": { "type": "string", "minLength": 1 },
24
+ "timeoutMs": { "type": "number", "minimum": 1, "default": 5000 },
25
+ "maxOutputTokens": { "type": "number", "minimum": 1, "default": 32 },
26
+ "threshold": { "type": "number", "minimum": 0, "maximum": 1, "default": 0.7 }
27
+ }
28
+ },
29
+ "context": {
30
+ "type": "object",
31
+ "additionalProperties": false,
32
+ "properties": {
33
+ "source": {
34
+ "type": "string",
35
+ "enum": ["platform", "static"],
36
+ "default": "platform"
37
+ },
38
+ "maxMessages": { "type": "number", "minimum": 0, "default": 5 },
39
+ "refreshMs": { "type": "number", "minimum": 1, "default": 300000 }
40
+ }
41
+ },
42
+ "platform": {
43
+ "type": "object",
44
+ "additionalProperties": false,
45
+ "properties": {
46
+ "authMode": {
47
+ "type": "string",
48
+ "enum": ["runtime", "static-token"],
49
+ "default": "runtime"
50
+ },
51
+ "baseUrl": { "type": "string", "minLength": 1 },
52
+ "coworkerId": { "type": "string", "minLength": 1 },
53
+ "token": { "type": "string", "minLength": 1 },
54
+ "endpointPath": { "type": "string", "minLength": 1 }
55
+ }
56
+ },
57
+ "staticContext": {
58
+ "type": "object",
59
+ "additionalProperties": false,
60
+ "properties": {
61
+ "self": {
62
+ "type": "object",
63
+ "additionalProperties": false,
64
+ "required": ["id", "names"],
65
+ "properties": {
66
+ "id": { "type": "string", "minLength": 1 },
67
+ "names": { "type": "array", "items": { "type": "string" } },
68
+ "roleSummary": { "type": "string" }
69
+ }
70
+ },
71
+ "coworkers": {
72
+ "type": "array",
73
+ "items": {
74
+ "type": "object",
75
+ "additionalProperties": false,
76
+ "required": ["id", "names"],
77
+ "properties": {
78
+ "id": { "type": "string", "minLength": 1 },
79
+ "names": { "type": "array", "items": { "type": "string" } },
80
+ "roleSummary": { "type": "string" }
81
+ }
82
+ }
83
+ }
84
+ }
85
+ },
86
+ "logging": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "properties": {
90
+ "decisions": { "type": "boolean", "default": true },
91
+ "includeContent": { "type": "boolean", "default": false },
92
+ "classifierDebug": { "type": "boolean", "default": false }
93
+ }
94
+ }
95
+ }
96
+ },
97
+ "uiHints": {
98
+ "mode": {
99
+ "label": "Mode",
100
+ "help": "shadow logs decisions without suppressing replies; enforce suppresses skipped group/channel turns."
101
+ },
102
+ "classifier.provider": {
103
+ "label": "Classifier Provider",
104
+ "help": "Provider used for the lightweight binary participation decision."
105
+ },
106
+ "classifier.model": {
107
+ "label": "Classifier Model",
108
+ "help": "Model used for the lightweight binary participation decision. Platform-rendered configs use the coworker's configured OpenClaw model unless explicitly overridden."
109
+ },
110
+ "classifier.authProfileId": {
111
+ "label": "Classifier Auth Profile",
112
+ "help": "Optional OpenClaw auth profile id for the classifier model."
113
+ },
114
+ "classifier.timeoutMs": {
115
+ "label": "Classifier Timeout",
116
+ "help": "Maximum time to wait for the classifier before failing open."
117
+ },
118
+ "classifier.maxOutputTokens": {
119
+ "label": "Classifier Output Tokens",
120
+ "help": "Maximum classifier response tokens. This limits output only, not input context."
121
+ },
122
+ "classifier.threshold": {
123
+ "label": "Classifier Threshold",
124
+ "help": "Minimum score required for the coworker to participate in enforce mode."
125
+ },
126
+ "context.source": {
127
+ "label": "Context Source",
128
+ "help": "platform for production roster data; static for local development and tests."
129
+ },
130
+ "context.maxMessages": {
131
+ "label": "Recent Messages",
132
+ "help": "Number of recent group/channel messages included in classifier context."
133
+ },
134
+ "context.refreshMs": {
135
+ "label": "Context Refresh",
136
+ "help": "Cache duration for platform participation context."
137
+ },
138
+ "platform.authMode": {
139
+ "label": "Platform Auth Mode",
140
+ "help": "runtime uses the scoped runtime identity token flow. static-token is local/prototype only."
141
+ },
142
+ "platform.token": {
143
+ "label": "Platform Token",
144
+ "help": "Prototype-only static bearer token. Used only when platform.authMode is static-token.",
145
+ "sensitive": true
146
+ },
147
+ "logging.includeContent": {
148
+ "label": "Log Message Content",
149
+ "help": "Default off. Enable only for controlled debugging."
150
+ },
151
+ "logging.classifierDebug": {
152
+ "label": "Log Classifier Debug",
153
+ "help": "Default off. Emits structured classifier diagnostics; exact prompt/input/output still requires includeContent."
154
+ }
155
+ }
156
+ }
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@velanir/openclaw-participation-gate",
3
+ "version": "0.1.0",
4
+ "description": "OpenClaw plugin that gates group/channel participation for Velanir digital coworkers.",
5
+ "license": "UNLICENSED",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "openclaw.plugin.json",
18
+ "README.md"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/Botero-Labs/platform.git",
26
+ "directory": "packages/openclaw-plugins/participation-gate"
27
+ },
28
+ "engines": {
29
+ "node": ">=22.14.0"
30
+ },
31
+ "scripts": {
32
+ "build": "pnpm --filter=@oct8/oct8-secrets build && tsup src/index.ts --format esm --target node22 --dts --external openclaw --out-dir dist --clean",
33
+ "check-types": "pnpm --filter=@oct8/oct8-secrets build && tsc -p tsconfig.json --noEmit",
34
+ "test": "pnpm --filter=@oct8/oct8-secrets build && vitest run"
35
+ },
36
+ "peerDependencies": {
37
+ "openclaw": ">=2026.5.4"
38
+ },
39
+ "peerDependenciesMeta": {
40
+ "openclaw": {
41
+ "optional": true
42
+ }
43
+ },
44
+ "devDependencies": {
45
+ "@oct8/oct8-secrets": "workspace:*",
46
+ "@types/node": "^22.19.1",
47
+ "openclaw": "2026.5.4",
48
+ "tsup": "^8.4.0",
49
+ "typescript": "^5.7.0",
50
+ "vitest": "^4.0.0"
51
+ },
52
+ "openclaw": {
53
+ "extensions": [
54
+ "./src/index.ts"
55
+ ],
56
+ "runtimeExtensions": [
57
+ "./dist/index.js"
58
+ ],
59
+ "compat": {
60
+ "pluginApi": ">=2026.5.4"
61
+ }
62
+ }
63
+ }