@seekrit/openclaw-plugin 0.2.0 → 0.3.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.
- package/README.md +13 -4
- package/index.js +60 -0
- package/package.json +16 -1
package/README.md
CHANGED
|
@@ -20,16 +20,25 @@ Full guide: **<https://seekrit.dev/docs/guides/ai-agents/openclaw>**
|
|
|
20
20
|
|
|
21
21
|
## What this package is
|
|
22
22
|
|
|
23
|
-
A manifest and a resolver — no
|
|
24
|
-
|
|
25
|
-
`
|
|
26
|
-
|
|
23
|
+
A manifest and a resolver — no tools, no channels, and no capability prompts at
|
|
24
|
+
install time. OpenClaw reads `secretProviderIntegrations` out of
|
|
25
|
+
`openclaw.plugin.json` and spawns `seekrit-secret-ref-resolver.js` when it needs
|
|
26
|
+
values.
|
|
27
27
|
|
|
28
28
|
The resolver is a stdio bridge onto `seekrit openclaw resolve`, so the protocol
|
|
29
29
|
has exactly one implementation. Decryption happens in a short-lived child
|
|
30
30
|
process that exits when the batch is answered: the gateway never holds a token,
|
|
31
31
|
a data key, or a plaintext, and the seekrit API never sees one either.
|
|
32
32
|
|
|
33
|
+
`index.js` is a runtime entrypoint that **registers nothing**. It exists only
|
|
34
|
+
because ClawHub classifies any package carrying an `openclaw.plugin.json` as a
|
|
35
|
+
*code plugin* and won't publish one without an `openclaw.extensions` entry — a
|
|
36
|
+
manifest-only plugin has no category in the registry today. The gateway
|
|
37
|
+
therefore imports one inert module of ours at startup. That doesn't move the
|
|
38
|
+
boundary that matters, since decryption still happens in the child process, but
|
|
39
|
+
it does mean "OpenClaw executes none of our code in-process" is no longer
|
|
40
|
+
strictly true, and it seemed better to say so than to drop the claim quietly.
|
|
41
|
+
|
|
33
42
|
## Ids
|
|
34
43
|
|
|
35
44
|
Two shapes, mirroring `op://vault/item/field`:
|
package/index.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The plugin's runtime entrypoint.
|
|
3
|
+
*
|
|
4
|
+
* It registers nothing, and that is deliberate. Everything this plugin does
|
|
5
|
+
* lives in `openclaw.plugin.json`: OpenClaw reads `secretProviderIntegrations`
|
|
6
|
+
* out of the manifest without executing anything, and spawns
|
|
7
|
+
* `seekrit-secret-ref-resolver.js` as a short-lived child process when it needs
|
|
8
|
+
* values. There is no in-process work to do.
|
|
9
|
+
*
|
|
10
|
+
* This file exists because ClawHub classifies any package carrying an
|
|
11
|
+
* `openclaw.plugin.json` (and no `.claude-plugin`/`.codex-plugin`/`.cursor-plugin`
|
|
12
|
+
* bundle marker) as a *code plugin*, and refuses to publish one that doesn't
|
|
13
|
+
* declare `openclaw.extensions` — a manifest-only plugin has no category in the
|
|
14
|
+
* registry today. See `extractCodePluginArtifacts` in
|
|
15
|
+
* openclaw/clawhub `convex/lib/packageRegistry.ts`.
|
|
16
|
+
*
|
|
17
|
+
* The trade that makes: the gateway now imports this module at startup, where
|
|
18
|
+
* before it imported nothing of ours. The boundary that actually matters is
|
|
19
|
+
* unchanged — decryption still happens in a child process that exits when the
|
|
20
|
+
* batch is answered, so the gateway still never holds a token, a data key, or a
|
|
21
|
+
* plaintext. But "OpenClaw runs none of our code in-process" is no longer true,
|
|
22
|
+
* and the README says so rather than quietly dropping the claim.
|
|
23
|
+
*
|
|
24
|
+
* Keep `register` empty. Anything added here runs inside the gateway with the
|
|
25
|
+
* gateway's privileges, which is the thing this design was avoiding. If a CLI
|
|
26
|
+
* surface is ever wanted, weigh it against that.
|
|
27
|
+
*
|
|
28
|
+
* Written as plain JS with no imports on purpose: `definePluginEntry` from
|
|
29
|
+
* `openclaw/plugin-sdk/plugin-entry` is a shaping helper that returns exactly
|
|
30
|
+
* this object literal, and importing it would put a dependency on the host
|
|
31
|
+
* runtime into a package that currently has none.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/** Mirrors `emptyPluginConfigSchema()` — this plugin accepts no config keys. */
|
|
35
|
+
function emptyConfigSchema() {
|
|
36
|
+
return {
|
|
37
|
+
safeParse(value) {
|
|
38
|
+
if (value === undefined) return { success: true, data: undefined };
|
|
39
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
40
|
+
return { success: false, error: { issues: [{ message: "expected config object" }] } };
|
|
41
|
+
}
|
|
42
|
+
if (Object.keys(value).length > 0) {
|
|
43
|
+
return { success: false, error: { issues: [{ message: "config must be empty" }] } };
|
|
44
|
+
}
|
|
45
|
+
return { success: true, data: value };
|
|
46
|
+
},
|
|
47
|
+
jsonSchema: { type: "object", additionalProperties: false, properties: {} },
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export default {
|
|
52
|
+
id: "seekrit",
|
|
53
|
+
name: "seekrit",
|
|
54
|
+
description:
|
|
55
|
+
"Resolve OpenClaw exec SecretRefs from seekrit — end-to-end encrypted secrets, decrypted locally by a short-lived child process.",
|
|
56
|
+
configSchema: emptyConfigSchema(),
|
|
57
|
+
register() {
|
|
58
|
+
// Intentionally empty — see the note above.
|
|
59
|
+
},
|
|
60
|
+
};
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seekrit/openclaw-plugin",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "seekrit for OpenClaw — resolve exec SecretRefs from end-to-end encrypted secrets, so the gateway config holds no plaintext and the seekrit API never sees one.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
|
+
"index.js",
|
|
10
11
|
"openclaw.plugin.json",
|
|
11
12
|
"seekrit-secret-ref-resolver.js",
|
|
12
13
|
"README.md"
|
|
@@ -24,6 +25,20 @@
|
|
|
24
25
|
"zero-knowledge"
|
|
25
26
|
],
|
|
26
27
|
"homepage": "https://seekrit.dev/docs/guides/ai-agents/openclaw",
|
|
28
|
+
"openclaw": {
|
|
29
|
+
"extensions": [
|
|
30
|
+
"./index.js"
|
|
31
|
+
],
|
|
32
|
+
"compat": {
|
|
33
|
+
"pluginApi": ">=2026.5.28"
|
|
34
|
+
},
|
|
35
|
+
"build": {
|
|
36
|
+
"openclawVersion": "2026.7.1"
|
|
37
|
+
},
|
|
38
|
+
"install": {
|
|
39
|
+
"npmSpec": "@seekrit/openclaw-plugin"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
27
42
|
"license": "MIT",
|
|
28
43
|
"dependencies": {
|
|
29
44
|
"@seekrit/cli": "^1.1.0"
|