@atbash/atbash-openclaw 0.1.17-dev.0 → 0.1.18
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 +16 -31
- package/dist/config.js +0 -28
- package/dist/context-mapper.js +7 -40
- package/dist/index.js +2 -2
- package/package.json +6 -16
- package/LICENSE +0 -28
package/README.md
CHANGED
|
@@ -7,12 +7,9 @@ If you're not using OpenClaw and want to use ATBASH from your own code, install
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
openclaw plugins install @atbash/atbash-openclaw
|
|
11
|
-
openclaw plugins install @atbash/atbash-openclaw@dev # development
|
|
10
|
+
openclaw plugins install @atbash/atbash-openclaw
|
|
12
11
|
```
|
|
13
12
|
|
|
14
|
-
**The judge endpoint and chain ids are compiled into the build**, so the npm tag selects the environment. Install the plain tag if your agent was onboarded on production, the `@dev` tag if it was onboarded on development; `openclaw plugins list` shows which you have (a `-dev.N` version is the development build). No configuration repoints a build afterwards — the wrong one loads cleanly, fires its hook, and then fails every judge call because the agent does not exist on the chain that build targets. Organization names are not unique across environments, so a resolving org name is not proof the build is right.
|
|
15
|
-
|
|
16
13
|
The plugin signs audit transactions locally with your agent's secp256k1 private key. The key never leaves your machine; only signed bytes plus the corresponding public key are transmitted.
|
|
17
14
|
|
|
18
15
|
## Get an agent key
|
|
@@ -37,40 +34,37 @@ Contact the ATBASH team to register an agent and obtain a key pair.
|
|
|
37
34
|
|
|
38
35
|
## Configure it in OpenClaw
|
|
39
36
|
|
|
40
|
-
|
|
41
|
-
`plugins.allow` list — added `atbash-openclaw` to it. Never hand-write the install directory: OpenClaw has
|
|
42
|
-
moved it between releases and records whichever it used, which is what it loads from. `openclaw plugins list`
|
|
43
|
-
shows the current state.
|
|
44
|
-
|
|
45
|
-
All that is left is your configuration. Open `~/.openclaw/openclaw.json` and add, keeping the plugins
|
|
46
|
-
already there:
|
|
37
|
+
Open `~/.openclaw/openclaw.json` and add:
|
|
47
38
|
|
|
48
39
|
```json
|
|
49
40
|
{
|
|
50
41
|
"plugins": {
|
|
42
|
+
"allow": [
|
|
43
|
+
"openclaw"
|
|
44
|
+
],
|
|
45
|
+
"load": {
|
|
46
|
+
"paths": [
|
|
47
|
+
"/Users/<your-username>/.openclaw/extensions/openclaw"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
51
50
|
"entries": {
|
|
52
|
-
"
|
|
51
|
+
"openclaw": {
|
|
53
52
|
"enabled": true,
|
|
54
53
|
"config": {
|
|
55
54
|
"enabled": true,
|
|
56
55
|
"enforceDecision": true,
|
|
57
|
-
"chromiaSecretPath": "~/.config/atbash/guard-client-key"
|
|
58
|
-
"orgName": "<your org name>"
|
|
56
|
+
"chromiaSecretPath": "~/.config/atbash/guard-client-key"
|
|
59
57
|
},
|
|
60
58
|
"hooks": {
|
|
61
59
|
"allowConversationAccess": true,
|
|
62
60
|
"allowPromptInjection": true
|
|
63
|
-
|
|
61
|
+
}
|
|
64
62
|
}
|
|
65
63
|
}
|
|
66
64
|
}
|
|
67
65
|
}
|
|
68
66
|
```
|
|
69
67
|
|
|
70
|
-
The plugin id is `atbash-openclaw` — it comes from the `id` field in this package's `openclaw.plugin.json`,
|
|
71
|
-
not from the npm package name. A `plugins.entries` key that does not match the id is not an error: the
|
|
72
|
-
plugin loads unconfigured and audits nothing.
|
|
73
|
-
|
|
74
68
|
### Config fields
|
|
75
69
|
|
|
76
70
|
| Field | Type | Default | What it does |
|
|
@@ -78,19 +72,18 @@ plugin loads unconfigured and audits nothing.
|
|
|
78
72
|
| `enabled` | bool | `true` | Master switch. `false` = plugin returns immediately. |
|
|
79
73
|
| `enforceDecision` | bool | `true` | Surfaced to logs. The plugin always blocks on `BLOCK`. |
|
|
80
74
|
| `chromiaSecretPath` | string | `~/.config/atbash/guard-client-key` | Path to the agent key file. Supports `~/`. |
|
|
81
|
-
| `orgName` | string | — | Organization the agent was onboarded under, spelled as the dashboard shows it. The plugin resolves which chain to query from this, so it is required when the org is on a private chain. |
|
|
82
75
|
| `debug` | bool | `false` | When `true`, logs a one-line probe for every `before_tool_call` showing `toolName`, top-level event/ctx/args keys, and whether the call was classified as a memory write. Useful for verifying memory-write classifier coverage against real traffic. Logs shape only — argument values are never printed. |
|
|
83
76
|
|
|
84
77
|
## Updating
|
|
85
78
|
|
|
86
79
|
```bash
|
|
87
|
-
openclaw plugins update atbash-openclaw
|
|
80
|
+
openclaw plugins update @atbash/atbash-openclaw
|
|
88
81
|
```
|
|
89
82
|
|
|
90
83
|
## Uninstalling
|
|
91
84
|
|
|
92
85
|
```bash
|
|
93
|
-
openclaw plugins uninstall atbash-openclaw
|
|
86
|
+
openclaw plugins uninstall @atbash/atbash-openclaw
|
|
94
87
|
```
|
|
95
88
|
|
|
96
89
|
The agent key file at `~/.config/atbash/guard-client-key` is **not** removed — delete it manually if you want to retire the agent identity.
|
|
@@ -118,19 +111,11 @@ The agent's own tool execution is unaffected — only the data sent to the judge
|
|
|
118
111
|
## Troubleshooting
|
|
119
112
|
|
|
120
113
|
**Tool calls aren't being audited.**
|
|
121
|
-
Check `enabled: true` is set both on the entry (`plugins.entries
|
|
114
|
+
Check `enabled: true` is set both on the entry (`plugins.entries.openclaw.enabled`) and inside `config` (`config.enabled`).
|
|
122
115
|
|
|
123
116
|
**Every tool call is blocked, even safe ones.**
|
|
124
117
|
The plugin is fail-closed: any pipeline error blocks. Look for `[atbash] …` warnings in the OpenClaw log. Most often: missing key, expired key, or restricted egress.
|
|
125
118
|
|
|
126
|
-
## Maintainer release contract
|
|
127
|
-
|
|
128
|
-
Development packages are released only through the protected **Publish development package** GitHub workflow. The workflow requires the `npm` environment, the exact `PUBLISH` confirmation, and npm trusted-publisher configuration for this repository and workflow. It never accepts a registry token from package source.
|
|
129
|
-
|
|
130
|
-
The release guard refuses a dirty checkout, reads the live package and SDK tags, chooses a collision-free prerelease, copies only Git-tracked files into a temporary staging tree, pins the exact SDK version there, installs and tests from the staged lockfile, cleans and rebuilds `dist`, validates the tarball, rechecks registry state, publishes, and verifies the resulting `dev` tag. The tracked source manifest is never rewritten by a release.
|
|
131
|
-
|
|
132
|
-
Because this repository is private, npm provenance statements are not supported. Trusted publishing still removes long-lived npm tokens; configure the protected npm environment and trusted publisher before enabling the workflow.
|
|
133
|
-
|
|
134
119
|
## License
|
|
135
120
|
|
|
136
121
|
Proprietary — all rights reserved. See [LICENSE](https://atbash.ai/license). Commercial licensing inquiries: contact the Atbash team.
|
package/dist/config.js
CHANGED
|
@@ -1,33 +1,5 @@
|
|
|
1
1
|
const PLUGIN_ID = "atbash-openclaw";
|
|
2
|
-
/**
|
|
3
|
-
* Ids this plugin shipped under before it was renamed. OpenClaw matches
|
|
4
|
-
* `plugins.entries` keys against the manifest id, so an entry left under one of
|
|
5
|
-
* these is inert — no error, no config, and the plugin runs on defaults. That
|
|
6
|
-
* silence is what makes the rename expensive, so we say something instead.
|
|
7
|
-
*/
|
|
8
|
-
const FORMER_PLUGIN_IDS = ["openclaw", "atbash-plugin"];
|
|
9
2
|
/** @internal */
|
|
10
3
|
export function readPluginConfig(api) {
|
|
11
4
|
return api.config?.plugins?.entries?.[PLUGIN_ID]?.config ?? {};
|
|
12
5
|
}
|
|
13
|
-
/**
|
|
14
|
-
* Warn when configuration is found under a former plugin id.
|
|
15
|
-
*
|
|
16
|
-
* @internal
|
|
17
|
-
*/
|
|
18
|
-
export function warnOnFormerIdConfig(api) {
|
|
19
|
-
const plugins = api.config?.plugins;
|
|
20
|
-
const entries = plugins?.entries ?? {};
|
|
21
|
-
const allow = Array.isArray(plugins?.allow) ? plugins.allow : [];
|
|
22
|
-
const stale = FORMER_PLUGIN_IDS.filter((id) => entries[id] !== undefined || allow.includes(id));
|
|
23
|
-
if (stale.length === 0)
|
|
24
|
-
return;
|
|
25
|
-
const configured = entries[PLUGIN_ID]?.config !== undefined;
|
|
26
|
-
api.logger?.warn?.(`[atbash] found config under former plugin id${stale.length > 1 ? "s" : ""} ` +
|
|
27
|
-
`${stale.map((id) => `"${id}"`).join(", ")} — this plugin's id is "${PLUGIN_ID}" ` +
|
|
28
|
-
`and those entries are ignored` +
|
|
29
|
-
(configured
|
|
30
|
-
? ". Remove them to avoid confusion."
|
|
31
|
-
: `. No "${PLUGIN_ID}" config found, so the plugin is running on defaults — ` +
|
|
32
|
-
`move your settings under "${PLUGIN_ID}".`), { formerIds: stale, configured });
|
|
33
|
-
}
|
package/dist/context-mapper.js
CHANGED
|
@@ -1,32 +1,3 @@
|
|
|
1
|
-
// Mirrors the server-side redact-secrets patterns. The server refuses signed
|
|
2
|
-
// payloads that contain secrets because it cannot modify signed bytes — so we
|
|
3
|
-
// must scrub them client-side before building the signed context string.
|
|
4
|
-
const SECRET_PATTERNS = [
|
|
5
|
-
/\bsk-ant-[A-Za-z0-9_-]{20,}/g,
|
|
6
|
-
/\bsk-proj-[A-Za-z0-9_-]{20,}/g,
|
|
7
|
-
/\bsk-[A-Za-z0-9]{20,}/g,
|
|
8
|
-
/\b(?:gh[pousr]|github_pat)_[A-Za-z0-9_]{30,}/g,
|
|
9
|
-
/\bAIza[0-9A-Za-z_-]{35}/g,
|
|
10
|
-
/\bya29\.[0-9A-Za-z_-]{20,}/g,
|
|
11
|
-
/\b(?:AKIA|ASIA|AGPA|AROA|ANPA|ANVA|ASCA|AIDA|AIPA)[0-9A-Z]{16}\b/g,
|
|
12
|
-
/\b(?:sk|rk|pk)_(?:live|test)_[A-Za-z0-9]{20,}/g,
|
|
13
|
-
/\bxox[abprseo]-[A-Za-z0-9-]{10,}/g,
|
|
14
|
-
/\bSG\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}/g,
|
|
15
|
-
/\bnpm_[A-Za-z0-9]{36,}\b/g,
|
|
16
|
-
/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g,
|
|
17
|
-
// Generic high-entropy token (32+ chars, mixed alpha+digit, not UUID, not 0x addr, not pure hex)
|
|
18
|
-
/\b(?!0x[0-9a-fA-F])(?![0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b)(?=[A-Za-z0-9_-]*[0-9])(?=[A-Za-z0-9_-]*[A-Za-z])(?![0-9a-fA-F]+$)[A-Za-z0-9_-]{32,}\b/g,
|
|
19
|
-
// Base64-encoded secrets (40+ chars with + or /)
|
|
20
|
-
/(?<![A-Za-z0-9+/])(?=[A-Za-z0-9+/]*[+/])(?=[A-Za-z0-9+/]*[0-9])(?=[A-Za-z0-9+/]*[A-Za-z])[A-Za-z0-9+/]{40,}={0,2}(?![A-Za-z0-9+/=])/g,
|
|
21
|
-
];
|
|
22
|
-
function redactValue(s) {
|
|
23
|
-
let out = s;
|
|
24
|
-
for (const re of SECRET_PATTERNS) {
|
|
25
|
-
re.lastIndex = 0;
|
|
26
|
-
out = out.replace(re, "[REDACTED]");
|
|
27
|
-
}
|
|
28
|
-
return out;
|
|
29
|
-
}
|
|
30
1
|
const ASSET_BY_CONTRACT = {
|
|
31
2
|
"0xdac17f958d2ee523a2206206994597c13d831ec7": "USDT",
|
|
32
3
|
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": "USDC",
|
|
@@ -114,16 +85,12 @@ export function mapEventToInput(event, ctx) {
|
|
|
114
85
|
ctx.name ??
|
|
115
86
|
"unknown";
|
|
116
87
|
const args = ev.params ?? ctx.params ?? ev.args ?? ctx.args ?? ev.arguments ?? ctx.arguments;
|
|
117
|
-
//
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
// server's
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
agent_id: redactValue(ctx.agentId ?? ""),
|
|
125
|
-
channel_id: redactValue(ctx.channelId ?? ""),
|
|
126
|
-
account_id: redactValue(ctx.accountId ?? ""),
|
|
127
|
-
});
|
|
88
|
+
// Only tool_name is safe to include in signed bytes — it's always a short
|
|
89
|
+
// tool name string, never a secret. The other context fields (run_id,
|
|
90
|
+
// agent_id, channel_id, account_id) come from openclaw internals and may
|
|
91
|
+
// contain high-entropy values that trigger the server's containsSecret gate,
|
|
92
|
+
// even after client-side redaction (pattern mismatch between SDK NAPI binary
|
|
93
|
+
// and server TypeScript).
|
|
94
|
+
const context = JSON.stringify({ tool_name: toolName });
|
|
128
95
|
return { toolName, args, context, resolved: canonicalizeFinancial(toolName, args) };
|
|
129
96
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`);return e.logger?.warn?.("[atbash] HOLD",{reason:l,toolCallId:u.toolCallId}),
|
|
1
|
+
"use strict";var p=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var R=(o,e)=>{for(var r in e)p(o,r,{get:e[r],enumerable:!0})},P=(o,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of S(e))!x.call(o,t)&&t!==r&&p(o,t,{get:()=>e[t],enumerable:!(a=k(e,t))||a.enumerable});return o};var D=o=>P(p({},"__esModule",{value:!0}),o);var O={};R(O,{default:()=>C});module.exports=D(O);var E=require("os"),i=require("@atbash/sdk");var I="atbash-openclaw";function h(o){return o.config?.plugins?.entries?.[I]?.config??{}}var v={"0xdac17f958d2ee523a2206206994597c13d831ec7":"USDT","0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48":"USDC","0x6b175474e89094c44da98b954eedeac495271d0f":"DAI","0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2":"WETH","0x2260fac5e5542a773aa44fbcfedf7c193bc2c599":"WBTC","0x1f9840a85d5af5bf1d1762f925bdaddc4201f984":"UNI","0x514910771af9ca656af840dff83e8264ecf986ca":"LINK","0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9":"AAVE","0xb0df6379ba1692841965a0745ac1bd3046d79ba3":"ATBASH","0xe9c094187219d9a29382c1a36fc43619c9257777":"ATBASH","0xf8b071428558c657a7a9aa1c43e152e75dd77777":"ATBASH"},y=/\b(0x[a-fA-F0-9]{40})\b/,j=/(0x[a-fA-F0-9]{40})/,w=/\b(transfer|send|swap|approve|erc20)\b/i;function L(o){if(!o)return"ETH";let e=o.toLowerCase(),r=j.exec(e);return r?v[r[1].toLowerCase()]??"other":e==="c60"||e==="eth"?"ETH":e==="atbash"?"ATBASH":e==="usdt"||e==="tether"?"USDT":e==="usdc"?"USDC":"other"}function b(o,...e){for(let r of e){let a=o[r];if(typeof a=="string"&&a.trim())return a.trim()}}function N(o,e){let r=e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0,a=r?b(r,"command","cmd","shell_command"):void 0,t=w.test(o),g=a?w.test(a):!1,n=a?y.test(a):!1;if(!t&&!g&&!n)return;let d=m=>a?new RegExp(`--${m}[= ]+(\\S+)`).exec(a)?.[1]:void 0,f=(r?b(r,"token","token_address","asset","currency"):void 0)??d("token");if(!f&&a){let m=y.exec(a);m&&(f=m[1])}let u=(r?b(r,"to","recipient","destination"):void 0)??d("to")??d("recipient"),l=(r?b(r,"amount","value","qty"):void 0)??d("amount"),s=L(f??""),c=a??o;return{operation:/\bswap\b/i.test(c)?"swap":/\b(approve|erc20)\b/i.test(c)?"approve":"transfer",asset:s,amount:l,recipient_status:u?"external":"unspecified",note:"canonicalized pre-judge; raw 0x addresses omitted (redacted upstream)"}}function A(o,e){let r=o??{},a=r.toolName??e.tool?.name??e.toolName??e.name??"unknown",t=r.params??e.params??r.args??e.args??r.arguments??e.arguments,g=JSON.stringify({tool_name:a});return{toolName:a,args:t,context:g,resolved:N(a,t)}}function T(o){return o.replace(/^~(?=\/|$)/,(0,E.homedir)())}function _(o){return o.memoryWorkspaceDir?T(o.memoryWorkspaceDir):process.cwd()}function M(o){if(o.judgeEndpoint)return o.judgeEndpointPolicy==="self-hosted"?{policy:"self-hosted",endpoint:o.judgeEndpoint,verifyPubKey:o.judgeVerifyPubKey??""}:{policy:"default",endpoint:o.judgeEndpoint}}function C(o){let e=o,r=h(e);if(r.enabled===!1){e.logger?.info?.("[atbash] plugin disabled via config");return}(0,i.setupTelemetry)({enabled:!0,source:"plugin:openclaw"}),process.once("beforeExit",()=>(0,i.shutdownTelemetry)()),process.once("SIGINT",()=>(0,i.shutdownTelemetry)().finally(()=>process.exit(0))),process.once("SIGTERM",()=>(0,i.shutdownTelemetry)().finally(()=>process.exit(0)));let a;try{a=i.Atbash.fromConfig({judge:M(r),keyPath:r.chromiaSecretPath,orgName:r.orgName,failClosed:r.enforceDecision!==!1,logger:e.logger})}catch(n){let d=n instanceof Error?n.message:String(n);throw e.logger?.warn?.("[atbash] init failed",{error:d}),n}let t=r.enforceDecision!==!1;e.logger?.info?.("[atbash] plugin loaded",{enforceDecision:t});let g=(0,i.createMemoryGuardManager)({auth:a.auth,workspaceDir:_(r),memoryFilePath:r.memoryFilePath?T(r.memoryFilePath):void 0,ttlMs:r.memorySyncTTLMs,rollbackMinScore:r.memoryRollbackMinScore,memoryPathPatterns:r.memoryPathPatterns,judgeEndpoint:r.judgeEndpoint,judgeVerifyPubKey:r.judgeVerifyPubKey,orgName:r.orgName,enforce:t,debug:!!r.debug,hostLogger:e.logger});if(g.runBootProbe().catch(n=>{e.logger?.warn?.("[atbash] boot probe failed",{error:n instanceof Error?n.message:String(n)})}),!e.on){e.logger?.warn?.("[atbash] on() API not available");return}e.on("before_tool_call",async(n,d)=>{let f;try{f=await g.handleBeforeToolCall(n,d)}catch(s){let c=s instanceof Error?s.message:String(s);return e.logger?.warn?.("[atbash] memory guard error",{error:c}),s instanceof i.MemoryIntegrityError||t?{block:!0,blockReason:`Memory guard error: ${c}`,allow:!1,reason:`Memory guard error: ${c}`}:{allow:!0}}if(f)return f;let u;try{u=await a.auditToolCall(A(n,d))}catch(s){let c=s instanceof Error?s.message:String(s);return e.logger?.warn?.("[atbash] unexpected error",{error:c}),t?{block:!0,blockReason:`Atbash unavailable: ${c}`,allow:!1,reason:`Atbash unavailable: ${c}`}:{allow:!0}}let l=u.reason??"";switch(u.verdict){case"BLOCK":return e.logger?.warn?.("[atbash] BLOCK",{reason:l}),t?{block:!0,blockReason:l,allow:!1,reason:l}:{allow:!0};case"HOLD":{let s=["Action held for operator review. The agent will not be jailed \u2014 please approve or reject this request from the Atbash dashboard, then ask the agent to try again.",`Reason: ${l}`];u.toolCallId&&s.push(`Tool Call ID: ${u.toolCallId}`);let c=s.join(`
|
|
2
|
+
`);return e.logger?.warn?.("[atbash] HOLD",{reason:l,toolCallId:u.toolCallId}),t?{block:!0,blockReason:c,allow:!1,reason:c}:{allow:!0}}case"ERROR":return e.logger?.warn?.("[atbash] ERROR",{reason:l}),t?{block:!0,blockReason:l,allow:!1,reason:l}:{allow:!0};case"ALLOW":default:return e.logger?.info?.("[atbash] ALLOW",{reason:l}),{allow:!0}}})}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atbash/atbash-openclaw",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.18",
|
|
4
4
|
"description": "OpenClaw ATBASH tool-audit plugin. Thin adapter that maps OpenClaw's before_tool_call hook onto @atbash/sdk.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -11,13 +11,10 @@
|
|
|
11
11
|
"LICENSE"
|
|
12
12
|
],
|
|
13
13
|
"scripts": {
|
|
14
|
-
"build": "
|
|
14
|
+
"build": "tsc && esbuild dist/index.js --bundle --platform=node --external:postchain-client --external:@atbash/sdk --minify --allow-overwrite --outfile=dist/index.js",
|
|
15
15
|
"typecheck": "tsc --noEmit",
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"verify:package": "node scripts/release.mjs --verify-current",
|
|
19
|
-
"release": "node scripts/release.mjs --channel latest",
|
|
20
|
-
"release:dev": "node scripts/release.mjs --channel dev"
|
|
16
|
+
"release": "npm pkg set \"dependencies[@atbash/sdk]=^$(npm view @atbash/sdk dist-tags.latest)\" && npm version patch --no-git-tag-version && npm run build && npx npm@10 publish --access public",
|
|
17
|
+
"release:dev": "npm pkg set \"dependencies[@atbash/sdk]=$(npm view @atbash/sdk dist-tags.dev)\" && npm version prerelease --preid=dev --no-git-tag-version && npm run build && npx npm@10 publish --access public --tag dev"
|
|
21
18
|
},
|
|
22
19
|
"keywords": [
|
|
23
20
|
"openclaw",
|
|
@@ -30,24 +27,17 @@
|
|
|
30
27
|
],
|
|
31
28
|
"author": "atbash",
|
|
32
29
|
"license": "LICENSED",
|
|
33
|
-
"repository": {
|
|
34
|
-
"type": "git",
|
|
35
|
-
"url": "https://github.com/Atbash-Ai/atbash-openclaw-plugin",
|
|
36
|
-
"directory": "openclaw"
|
|
37
|
-
},
|
|
38
30
|
"openclaw": {
|
|
39
31
|
"extensions": [
|
|
40
32
|
"./dist/index.js"
|
|
41
33
|
]
|
|
42
34
|
},
|
|
43
35
|
"dependencies": {
|
|
44
|
-
"@atbash/sdk": "0.
|
|
36
|
+
"@atbash/sdk": "^0.7.1"
|
|
45
37
|
},
|
|
46
38
|
"devDependencies": {
|
|
47
39
|
"@types/node": "^25.7.0",
|
|
48
40
|
"esbuild": "^0.24.0",
|
|
49
|
-
"
|
|
50
|
-
"typescript": "^5.9.3",
|
|
51
|
-
"vitest": "^4.1.6"
|
|
41
|
+
"typescript": "^5.9.3"
|
|
52
42
|
}
|
|
53
43
|
}
|
package/LICENSE
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
Atbash CLI — Proprietary Software License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Atbash,
|
|
4
|
-
All rights reserved.
|
|
5
|
-
|
|
6
|
-
Redistribution and use in source and binary forms, with or without
|
|
7
|
-
modification, are permitted provided that the following conditions are met:
|
|
8
|
-
|
|
9
|
-
1. Redistributions of source code must retain the above copyright notice, this
|
|
10
|
-
list of conditions and the following disclaimer.
|
|
11
|
-
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
-
this list of conditions and the following disclaimer in the documentation
|
|
13
|
-
and/or other materials provided with the distribution.
|
|
14
|
-
|
|
15
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
16
|
-
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
17
|
-
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
18
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
19
|
-
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
20
|
-
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
21
|
-
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
22
|
-
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
23
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
24
|
-
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
25
|
-
|
|
26
|
-
The views and conclusions contained in the software and documentation are those
|
|
27
|
-
of the authors and should not be interpreted as representing official policies,
|
|
28
|
-
either expressed or implied, Atbash.
|