@deepstrike/core 0.1.4 → 0.1.7

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 ADDED
@@ -0,0 +1,16 @@
1
+ # `@deepstrike/core`
2
+
3
+ Native DeepStrike kernel loader for Node.js.
4
+
5
+ This package contains the JavaScript loader and TypeScript definitions. The native
6
+ `.node` binary is shipped in a platform-specific optional dependency such as
7
+ `@deepstrike/core-linux-x64-gnu` or `@deepstrike/core-darwin-arm64`.
8
+
9
+ Install `@deepstrike/sdk` for normal use:
10
+
11
+ ```bash
12
+ npm install @deepstrike/sdk
13
+ ```
14
+
15
+ The install does not run a postinstall downloader. npm selects the matching
16
+ platform package through `optionalDependencies`.
package/index.d.ts CHANGED
@@ -107,7 +107,7 @@ export interface LoopObservation {
107
107
  rhoAfter?: number
108
108
  }
109
109
  /** JS-friendly governance verdict returned by `Governance.evaluate`. */
110
- export interface GovernanceVerdictObj {
110
+ export interface GovernanceVerdict {
111
111
  /** `"allow"` | `"deny"` | `"rate_limited"` | `"ask_user"` */
112
112
  kind: string
113
113
  reason?: string
@@ -286,13 +286,21 @@ export declare class Governance {
286
286
  addPermissionRule(pattern: string, action: string): void
287
287
  /** Hard-block a tool name (veto stage — cannot be overridden by permission rules). */
288
288
  blockTool(name: string): void
289
+ /** Configure a per-tool sliding-window rate limit. */
290
+ setRateLimit(toolName: string, maxCalls: number, windowMs: bigint): void
291
+ /** Require a parameter path such as `"path"` or `"payload.mode"` to be present. */
292
+ requireParam(toolName: string, paramPath: string): void
293
+ /** Restrict a string parameter path to one of the allowed values. */
294
+ allowParamValues(toolName: string, paramPath: string, allowedValues: Array<string>): void
295
+ /** Restrict a numeric parameter path to an inclusive range. */
296
+ limitParamRange(toolName: string, paramPath: string, min?: number | undefined | null, max?: number | undefined | null): void
289
297
  /** Advance the internal clock used by rate limiting and audit. */
290
298
  setTime(nowMs: bigint): void
291
299
  /**
292
300
  * Evaluate a tool call through the full pipeline (Permission → Veto → RateLimit → Constraint → Audit).
293
301
  * `argsJson`: JSON-encoded tool arguments string.
294
302
  */
295
- evaluate(toolName: string, argsJson: string): GovernanceVerdictObj
303
+ evaluate(toolName: string, argsJson: string): GovernanceVerdict
296
304
  }
297
305
  /**
298
306
  * Kernel state machine for the evaluation cycle.
package/index.js CHANGED
@@ -1,320 +1,101 @@
1
- /* tslint:disable */
2
- /* eslint-disable */
3
- /* prettier-ignore */
4
-
5
- /* auto-generated by NAPI-RS */
1
+ 'use strict'
6
2
 
7
3
  const { existsSync, readFileSync } = require('fs')
8
4
  const { join } = require('path')
9
5
 
10
6
  const { platform, arch } = process
11
7
 
12
- let nativeBinding = null
13
- let localFileExisted = false
14
- let loadError = null
8
+ const supportedTriples = [
9
+ 'darwin-arm64',
10
+ 'darwin-x64',
11
+ 'linux-arm64-gnu',
12
+ 'linux-arm64-musl',
13
+ 'linux-x64-gnu',
14
+ 'linux-x64-musl',
15
+ 'win32-x64-msvc',
16
+ ]
15
17
 
16
- function isMusl() {
17
- // For Node 10
18
- if (!process.report || typeof process.report.getReport !== 'function') {
19
- try {
20
- const lddPath = require('child_process').execSync('which ldd').toString().trim()
21
- return readFileSync(lddPath, 'utf8').includes('musl')
22
- } catch (e) {
23
- return true
24
- }
25
- } else {
26
- const { glibcVersionRuntime } = process.report.getReport().header
27
- return !glibcVersionRuntime
18
+ function readIfExists(path) {
19
+ try {
20
+ if (existsSync(path)) return readFileSync(path, 'utf8')
21
+ } catch {
22
+ return ''
28
23
  }
24
+ return ''
29
25
  }
30
26
 
31
- switch (platform) {
32
- case 'android':
33
- switch (arch) {
34
- case 'arm64':
35
- localFileExisted = existsSync(join(__dirname, 'index.android-arm64.node'))
36
- try {
37
- if (localFileExisted) {
38
- nativeBinding = require('./index.android-arm64.node')
39
- } else {
40
- nativeBinding = require('@deepstrike/core-android-arm64')
41
- }
42
- } catch (e) {
43
- loadError = e
44
- }
45
- break
46
- case 'arm':
47
- localFileExisted = existsSync(join(__dirname, 'index.android-arm-eabi.node'))
48
- try {
49
- if (localFileExisted) {
50
- nativeBinding = require('./index.android-arm-eabi.node')
51
- } else {
52
- nativeBinding = require('@deepstrike/core-android-arm-eabi')
53
- }
54
- } catch (e) {
55
- loadError = e
56
- }
57
- break
58
- default:
59
- throw new Error(`Unsupported architecture on Android ${arch}`)
60
- }
61
- break
62
- case 'win32':
63
- switch (arch) {
64
- case 'x64':
65
- localFileExisted = existsSync(
66
- join(__dirname, 'index.win32-x64-msvc.node')
67
- )
68
- try {
69
- if (localFileExisted) {
70
- nativeBinding = require('./index.win32-x64-msvc.node')
71
- } else {
72
- nativeBinding = require('@deepstrike/core-win32-x64-msvc')
73
- }
74
- } catch (e) {
75
- loadError = e
76
- }
77
- break
78
- case 'ia32':
79
- localFileExisted = existsSync(
80
- join(__dirname, 'index.win32-ia32-msvc.node')
81
- )
82
- try {
83
- if (localFileExisted) {
84
- nativeBinding = require('./index.win32-ia32-msvc.node')
85
- } else {
86
- nativeBinding = require('@deepstrike/core-win32-ia32-msvc')
87
- }
88
- } catch (e) {
89
- loadError = e
90
- }
91
- break
92
- case 'arm64':
93
- localFileExisted = existsSync(
94
- join(__dirname, 'index.win32-arm64-msvc.node')
95
- )
96
- try {
97
- if (localFileExisted) {
98
- nativeBinding = require('./index.win32-arm64-msvc.node')
99
- } else {
100
- nativeBinding = require('@deepstrike/core-win32-arm64-msvc')
101
- }
102
- } catch (e) {
103
- loadError = e
104
- }
105
- break
106
- default:
107
- throw new Error(`Unsupported architecture on Windows: ${arch}`)
108
- }
109
- break
110
- case 'darwin':
111
- localFileExisted = existsSync(join(__dirname, 'index.darwin-universal.node'))
112
- try {
113
- if (localFileExisted) {
114
- nativeBinding = require('./index.darwin-universal.node')
115
- } else {
116
- nativeBinding = require('@deepstrike/core-darwin-universal')
117
- }
118
- break
119
- } catch {}
120
- switch (arch) {
121
- case 'x64':
122
- localFileExisted = existsSync(join(__dirname, 'index.darwin-x64.node'))
123
- try {
124
- if (localFileExisted) {
125
- nativeBinding = require('./index.darwin-x64.node')
126
- } else {
127
- nativeBinding = require('@deepstrike/core-darwin-x64')
128
- }
129
- } catch (e) {
130
- loadError = e
131
- }
132
- break
133
- case 'arm64':
134
- localFileExisted = existsSync(
135
- join(__dirname, 'index.darwin-arm64.node')
136
- )
137
- try {
138
- if (localFileExisted) {
139
- nativeBinding = require('./index.darwin-arm64.node')
140
- } else {
141
- nativeBinding = require('@deepstrike/core-darwin-arm64')
142
- }
143
- } catch (e) {
144
- loadError = e
145
- }
146
- break
147
- default:
148
- throw new Error(`Unsupported architecture on macOS: ${arch}`)
149
- }
150
- break
151
- case 'freebsd':
152
- if (arch !== 'x64') {
153
- throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
154
- }
155
- localFileExisted = existsSync(join(__dirname, 'index.freebsd-x64.node'))
156
- try {
157
- if (localFileExisted) {
158
- nativeBinding = require('./index.freebsd-x64.node')
159
- } else {
160
- nativeBinding = require('@deepstrike/core-freebsd-x64')
161
- }
162
- } catch (e) {
163
- loadError = e
164
- }
165
- break
166
- case 'linux':
167
- switch (arch) {
168
- case 'x64':
169
- if (isMusl()) {
170
- localFileExisted = existsSync(
171
- join(__dirname, 'index.linux-x64-musl.node')
172
- )
173
- try {
174
- if (localFileExisted) {
175
- nativeBinding = require('./index.linux-x64-musl.node')
176
- } else {
177
- nativeBinding = require('@deepstrike/core-linux-x64-musl')
178
- }
179
- } catch (e) {
180
- loadError = e
181
- }
182
- } else {
183
- localFileExisted = existsSync(
184
- join(__dirname, 'index.linux-x64-gnu.node')
185
- )
186
- try {
187
- if (localFileExisted) {
188
- nativeBinding = require('./index.linux-x64-gnu.node')
189
- } else {
190
- nativeBinding = require('@deepstrike/core-linux-x64-gnu')
191
- }
192
- } catch (e) {
193
- loadError = e
194
- }
195
- }
196
- break
197
- case 'arm64':
198
- if (isMusl()) {
199
- localFileExisted = existsSync(
200
- join(__dirname, 'index.linux-arm64-musl.node')
201
- )
202
- try {
203
- if (localFileExisted) {
204
- nativeBinding = require('./index.linux-arm64-musl.node')
205
- } else {
206
- nativeBinding = require('@deepstrike/core-linux-arm64-musl')
207
- }
208
- } catch (e) {
209
- loadError = e
210
- }
211
- } else {
212
- localFileExisted = existsSync(
213
- join(__dirname, 'index.linux-arm64-gnu.node')
214
- )
215
- try {
216
- if (localFileExisted) {
217
- nativeBinding = require('./index.linux-arm64-gnu.node')
218
- } else {
219
- nativeBinding = require('@deepstrike/core-linux-arm64-gnu')
220
- }
221
- } catch (e) {
222
- loadError = e
223
- }
224
- }
225
- break
226
- case 'arm':
227
- if (isMusl()) {
228
- localFileExisted = existsSync(
229
- join(__dirname, 'index.linux-arm-musleabihf.node')
230
- )
231
- try {
232
- if (localFileExisted) {
233
- nativeBinding = require('./index.linux-arm-musleabihf.node')
234
- } else {
235
- nativeBinding = require('@deepstrike/core-linux-arm-musleabihf')
236
- }
237
- } catch (e) {
238
- loadError = e
239
- }
240
- } else {
241
- localFileExisted = existsSync(
242
- join(__dirname, 'index.linux-arm-gnueabihf.node')
243
- )
244
- try {
245
- if (localFileExisted) {
246
- nativeBinding = require('./index.linux-arm-gnueabihf.node')
247
- } else {
248
- nativeBinding = require('@deepstrike/core-linux-arm-gnueabihf')
249
- }
250
- } catch (e) {
251
- loadError = e
252
- }
253
- }
254
- break
255
- case 'riscv64':
256
- if (isMusl()) {
257
- localFileExisted = existsSync(
258
- join(__dirname, 'index.linux-riscv64-musl.node')
259
- )
260
- try {
261
- if (localFileExisted) {
262
- nativeBinding = require('./index.linux-riscv64-musl.node')
263
- } else {
264
- nativeBinding = require('@deepstrike/core-linux-riscv64-musl')
265
- }
266
- } catch (e) {
267
- loadError = e
268
- }
269
- } else {
270
- localFileExisted = existsSync(
271
- join(__dirname, 'index.linux-riscv64-gnu.node')
272
- )
273
- try {
274
- if (localFileExisted) {
275
- nativeBinding = require('./index.linux-riscv64-gnu.node')
276
- } else {
277
- nativeBinding = require('@deepstrike/core-linux-riscv64-gnu')
278
- }
279
- } catch (e) {
280
- loadError = e
281
- }
282
- }
283
- break
284
- case 's390x':
285
- localFileExisted = existsSync(
286
- join(__dirname, 'index.linux-s390x-gnu.node')
287
- )
288
- try {
289
- if (localFileExisted) {
290
- nativeBinding = require('./index.linux-s390x-gnu.node')
291
- } else {
292
- nativeBinding = require('@deepstrike/core-linux-s390x-gnu')
293
- }
294
- } catch (e) {
295
- loadError = e
296
- }
297
- break
298
- default:
299
- throw new Error(`Unsupported architecture on Linux: ${arch}`)
27
+ function isMusl() {
28
+ if (platform !== 'linux') return false
29
+
30
+ const report = typeof process.report?.getReport === 'function'
31
+ ? process.report.getReport()
32
+ : null
33
+ if (report?.header?.glibcVersionRuntime) return false
34
+
35
+ const ldd = readIfExists('/usr/bin/ldd') || readIfExists('/bin/ldd')
36
+ if (ldd.includes('musl')) return true
37
+ if (ldd.includes('GNU libc') || ldd.includes('glibc')) return false
38
+
39
+ return false
40
+ }
41
+
42
+ function packageTriple() {
43
+ if (platform === 'darwin') {
44
+ if (arch === 'arm64' || arch === 'x64') return `darwin-${arch}`
45
+ }
46
+
47
+ if (platform === 'win32') {
48
+ if (arch === 'x64') return 'win32-x64-msvc'
49
+ }
50
+
51
+ if (platform === 'linux') {
52
+ if (arch === 'arm64' || arch === 'x64') {
53
+ return `linux-${arch}-${isMusl() ? 'musl' : 'gnu'}`
300
54
  }
301
- break
302
- default:
303
- throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
55
+ }
56
+
57
+ return null
304
58
  }
305
59
 
306
- if (!nativeBinding) {
307
- if (loadError) {
308
- throw loadError
60
+ function requireLocal(triple) {
61
+ const candidates = [
62
+ `deepstrike-core.${triple}.node`,
63
+ 'deepstrike-core.node',
64
+ ]
65
+
66
+ for (const candidate of candidates) {
67
+ const path = join(__dirname, candidate)
68
+ if (existsSync(path)) return require(path)
309
69
  }
310
- throw new Error(`Failed to load native binding`)
70
+
71
+ return null
311
72
  }
312
73
 
313
- const { ContextEngine, LoopStateMachine, SignalRouter, Governance, EvalPipeline, IdlePipeline } = nativeBinding
74
+ function loadNativeBinding() {
75
+ const triple = packageTriple()
76
+ if (!triple || !supportedTriples.includes(triple)) {
77
+ throw new Error(
78
+ `Unsupported DeepStrike native platform: ${platform}/${arch}. ` +
79
+ `Supported targets: ${supportedTriples.join(', ')}.`,
80
+ )
81
+ }
82
+
83
+ const local = requireLocal(triple)
84
+ if (local) return local
85
+
86
+ const packageName = `@deepstrike/core-${triple}`
87
+ try {
88
+ return require(packageName)
89
+ } catch (error) {
90
+ const cause = error && typeof error === 'object' && 'message' in error
91
+ ? `\nCause: ${error.message}`
92
+ : ''
93
+ throw new Error(
94
+ `Failed to load ${packageName}. ` +
95
+ `Install @deepstrike/sdk or @deepstrike/core normally so npm can install ` +
96
+ `the matching optional native package for ${platform}/${arch}.${cause}`,
97
+ )
98
+ }
99
+ }
314
100
 
315
- module.exports.ContextEngine = ContextEngine
316
- module.exports.LoopStateMachine = LoopStateMachine
317
- module.exports.SignalRouter = SignalRouter
318
- module.exports.Governance = Governance
319
- module.exports.EvalPipeline = EvalPipeline
320
- module.exports.IdlePipeline = IdlePipeline
101
+ module.exports = loadNativeBinding()
package/package.json CHANGED
@@ -1,9 +1,14 @@
1
1
  {
2
2
  "name": "@deepstrike/core",
3
- "version": "0.1.4",
3
+ "version": "0.1.7",
4
4
  "description": "DeepStrike kernel — pre-built native addon",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
7
+ "files": [
8
+ "index.js",
9
+ "index.d.ts",
10
+ "README.md"
11
+ ],
7
12
  "license": "Apache-2.0 OR MIT",
8
13
  "napi": {
9
14
  "binaryName": "deepstrike-core",
@@ -12,14 +17,18 @@
12
17
  "aarch64-apple-darwin",
13
18
  "x86_64-unknown-linux-gnu",
14
19
  "aarch64-unknown-linux-gnu",
20
+ "x86_64-unknown-linux-musl",
21
+ "aarch64-unknown-linux-musl",
15
22
  "x86_64-pc-windows-msvc"
16
23
  ]
17
24
  },
18
25
  "optionalDependencies": {
19
- "@deepstrike/core-linux-x64-gnu": "0.1.4",
20
- "@deepstrike/core-linux-arm64-gnu": "0.1.4",
21
- "@deepstrike/core-darwin-x64": "0.1.4",
22
- "@deepstrike/core-darwin-arm64": "0.1.4",
23
- "@deepstrike/core-win32-x64-msvc": "0.1.4"
26
+ "@deepstrike/core-darwin-arm64": "0.1.7",
27
+ "@deepstrike/core-darwin-x64": "0.1.7",
28
+ "@deepstrike/core-linux-arm64-gnu": "0.1.7",
29
+ "@deepstrike/core-linux-arm64-musl": "0.1.7",
30
+ "@deepstrike/core-linux-x64-gnu": "0.1.7",
31
+ "@deepstrike/core-linux-x64-musl": "0.1.7",
32
+ "@deepstrike/core-win32-x64-msvc": "0.1.7"
24
33
  }
25
34
  }
package/Cargo.toml DELETED
@@ -1,22 +0,0 @@
1
- [package]
2
- name = "deepstrike-node"
3
- description = "Node.js bindings for DeepStrike runtime kernel"
4
- version.workspace = true
5
- edition.workspace = true
6
- license.workspace = true
7
-
8
- [lib]
9
- crate-type = ["cdylib"]
10
-
11
- [dependencies]
12
- # napi6 is required for BigInt support (we use it for u64 token counts and timestamps)
13
- napi = { version = "2", default-features = false, features = ["napi6"] }
14
- napi-derive = "2"
15
- deepstrike-core = { workspace = true }
16
- deepstrike-tokenizer = { workspace = true }
17
- compact_str = { workspace = true }
18
- serde_json = { workspace = true }
19
-
20
- [build-dependencies]
21
- napi-build = "2"
22
-
package/build.rs DELETED
@@ -1,3 +0,0 @@
1
- fn main() {
2
- napi_build::setup();
3
- }
@@ -1,22 +0,0 @@
1
- # `@deepstrike/core-darwin-arm64`
2
-
3
- Platform-specific native addon for [`@deepstrike/core`](https://www.npmjs.com/package/@deepstrike/core).
4
-
5
- - **Platform:** macOS ARM64 (Apple Silicon)
6
- - **Target triple:** `aarch64-apple-darwin`
7
-
8
- ## Do not install directly
9
-
10
- This package is an internal binary dependency. Install [`@deepstrike/sdk`](https://www.npmjs.com/package/@deepstrike/sdk) instead — the correct platform package is selected and installed automatically via `optionalDependencies`.
11
-
12
- ```bash
13
- npm install @deepstrike/sdk
14
- ```
15
-
16
- ## How it works
17
-
18
- `@deepstrike/core` loads this package at runtime when running on macOS with Apple Silicon. The `.node` file is a compiled Rust extension built with [napi-rs](https://napi.rs) that exposes the DeepStrike kernel (loop control, context compression, governance, signal routing) to Node.js.
19
-
20
- ## License
21
-
22
- Apache-2.0 OR MIT
@@ -1,16 +0,0 @@
1
- {
2
- "name": "@deepstrike/core-darwin-arm64",
3
- "version": "0.1.4",
4
- "cpu": [
5
- "arm64"
6
- ],
7
- "main": "deepstrike-core.darwin-arm64.node",
8
- "files": [
9
- "deepstrike-core.darwin-arm64.node"
10
- ],
11
- "description": "DeepStrike kernel — pre-built native addon",
12
- "license": "Apache-2.0 OR MIT",
13
- "os": [
14
- "darwin"
15
- ]
16
- }
@@ -1,22 +0,0 @@
1
- # `@deepstrike/core-darwin-x64`
2
-
3
- Platform-specific native addon for [`@deepstrike/core`](https://www.npmjs.com/package/@deepstrike/core).
4
-
5
- - **Platform:** macOS x64 (Intel)
6
- - **Target triple:** `x86_64-apple-darwin`
7
-
8
- ## Do not install directly
9
-
10
- This package is an internal binary dependency. Install [`@deepstrike/sdk`](https://www.npmjs.com/package/@deepstrike/sdk) instead — the correct platform package is selected and installed automatically via `optionalDependencies`.
11
-
12
- ```bash
13
- npm install @deepstrike/sdk
14
- ```
15
-
16
- ## How it works
17
-
18
- `@deepstrike/core` loads this package at runtime when running on macOS with an Intel processor. The `.node` file is a compiled Rust extension built with [napi-rs](https://napi.rs) that exposes the DeepStrike kernel (loop control, context compression, governance, signal routing) to Node.js.
19
-
20
- ## License
21
-
22
- Apache-2.0 OR MIT
@@ -1,16 +0,0 @@
1
- {
2
- "name": "@deepstrike/core-darwin-x64",
3
- "version": "0.1.4",
4
- "cpu": [
5
- "x64"
6
- ],
7
- "main": "deepstrike-core.darwin-x64.node",
8
- "files": [
9
- "deepstrike-core.darwin-x64.node"
10
- ],
11
- "description": "DeepStrike kernel — pre-built native addon",
12
- "license": "Apache-2.0 OR MIT",
13
- "os": [
14
- "darwin"
15
- ]
16
- }
@@ -1,22 +0,0 @@
1
- # `@deepstrike/core-linux-arm64-gnu`
2
-
3
- Platform-specific native addon for [`@deepstrike/core`](https://www.npmjs.com/package/@deepstrike/core).
4
-
5
- - **Platform:** Linux ARM64 (glibc)
6
- - **Target triple:** `aarch64-unknown-linux-gnu`
7
-
8
- ## Do not install directly
9
-
10
- This package is an internal binary dependency. Install [`@deepstrike/sdk`](https://www.npmjs.com/package/@deepstrike/sdk) instead — the correct platform package is selected and installed automatically via `optionalDependencies`.
11
-
12
- ```bash
13
- npm install @deepstrike/sdk
14
- ```
15
-
16
- ## How it works
17
-
18
- `@deepstrike/core` loads this package at runtime when running on Linux ARM64 with glibc (e.g. AWS Graviton, Raspberry Pi OS 64-bit). The `.node` file is a compiled Rust extension built with [napi-rs](https://napi.rs) that exposes the DeepStrike kernel (loop control, context compression, governance, signal routing) to Node.js.
19
-
20
- ## License
21
-
22
- Apache-2.0 OR MIT
@@ -1,19 +0,0 @@
1
- {
2
- "name": "@deepstrike/core-linux-arm64-gnu",
3
- "version": "0.1.4",
4
- "cpu": [
5
- "arm64"
6
- ],
7
- "main": "deepstrike-core.linux-arm64-gnu.node",
8
- "files": [
9
- "deepstrike-core.linux-arm64-gnu.node"
10
- ],
11
- "description": "DeepStrike kernel — pre-built native addon",
12
- "license": "Apache-2.0 OR MIT",
13
- "os": [
14
- "linux"
15
- ],
16
- "libc": [
17
- "glibc"
18
- ]
19
- }
@@ -1,22 +0,0 @@
1
- # `@deepstrike/core-linux-arm64-musl`
2
-
3
- Platform-specific native addon for [`@deepstrike/core`](https://www.npmjs.com/package/@deepstrike/core).
4
-
5
- - **Platform:** Linux ARM64 (musl / Alpine)
6
- - **Target triple:** `aarch64-unknown-linux-musl`
7
-
8
- ## Do not install directly
9
-
10
- This package is an internal binary dependency. Install [`@deepstrike/sdk`](https://www.npmjs.com/package/@deepstrike/sdk) instead — the correct platform package is selected and installed automatically via `optionalDependencies`.
11
-
12
- ```bash
13
- npm install @deepstrike/sdk
14
- ```
15
-
16
- ## How it works
17
-
18
- `@deepstrike/core` loads this package at runtime when running on Linux ARM64 with musl libc (e.g. Alpine Linux on ARM). The `.node` file is a compiled Rust extension built with [napi-rs](https://napi.rs) that exposes the DeepStrike kernel (loop control, context compression, governance, signal routing) to Node.js.
19
-
20
- ## License
21
-
22
- Apache-2.0 OR MIT