@arodroz/odin 1.27.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/LICENSE.md ADDED
@@ -0,0 +1,53 @@
1
+ # odin — End User License Agreement
2
+
3
+ Copyright © 2026 Antonio Rodriguez (Anteras). All rights reserved.
4
+
5
+ This agreement covers the `odin` command-line program and MCP server, the
6
+ `@arodroz/odin` npm packages that distribute it, and the `odin` plugin for
7
+ Claude Code and Codex (together, "the Software"). By installing or using the
8
+ Software you accept these terms.
9
+
10
+ ## 1. Free use
11
+
12
+ You may install and use the Software free of charge, for any purpose,
13
+ including commercial work, on any number of machines.
14
+
15
+ ## 2. Restrictions
16
+
17
+ You may not:
18
+
19
+ - sell, rent, sublicense or redistribute the Software, modified or not, except
20
+ by pointing others to the official distribution channels (npmjs.com
21
+ `@arodroz/odin`, github.com/arodroz/odin-plugins);
22
+ - modify, decompile, disassemble or reverse engineer the binaries, except where
23
+ applicable law expressly permits it despite this restriction;
24
+ - remove or alter this notice or any copyright notice.
25
+
26
+ ## 3. Licensed features
27
+
28
+ Some features, such as GESStabs generation, require a separate paid license
29
+ key. This agreement does not grant that license.
30
+
31
+ ## 4. Your data
32
+
33
+ The Software analyses the files you give it on your own machine and never
34
+ uploads your scripts or their content. Its only network traffic is the license
35
+ check for licensed features, which sends your license key and a machine
36
+ instance name to the license provider (Lemon Squeezy).
37
+
38
+ ## 5. No warranty
39
+
40
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
41
+ IMPLIED, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
42
+ NON-INFRINGEMENT. Diagnostics are an aid, not a guarantee that a questionnaire
43
+ behaves correctly in production.
44
+
45
+ ## 6. Limitation of liability
46
+
47
+ TO THE EXTENT PERMITTED BY LAW, THE AUTHOR IS NOT LIABLE FOR ANY DAMAGES
48
+ ARISING FROM THE USE OF, OR INABILITY TO USE, THE SOFTWARE.
49
+
50
+ ## 7. Termination
51
+
52
+ This license ends automatically if you breach it. On termination you must stop
53
+ using and delete the Software.
package/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # @arodroz/odin
2
+
3
+ The canonical NIPO ODIN analysis engine as a command-line tool and MCP server:
4
+ ground-truth diagnostics, the structural map of a questionnaire, corpus audits,
5
+ and the language reference — the same engine behind the ODIN VS Code extension.
6
+
7
+ ```sh
8
+ npm install -g @arodroz/odin
9
+ odin check path/to/script.odin # diagnostics, or "clean"
10
+ odin explain '*PUT' # reference for a command, function or operator
11
+ odin mcp # MCP server over stdio
12
+ ```
13
+
14
+ Prebuilt for Windows x64, macOS x64/arm64 and Linux x64/arm64; npm installs
15
+ only the binary for your platform. Requires Node.js 18 or later.
16
+
17
+ ## Use it from Claude Code or Codex
18
+
19
+ Install the `odin` plugin, which runs this package for you — no global install
20
+ needed:
21
+
22
+ ```text
23
+ # Claude Code
24
+ /plugin marketplace add arodroz/odin-plugins
25
+ /plugin install odin@anteras-odin
26
+
27
+ # Codex
28
+ codex plugin marketplace add arodroz/odin-plugins
29
+ codex plugin add odin@anteras-odin
30
+ ```
31
+
32
+ Or register only the MCP server: `claude mcp add odin -- npx -y @arodroz/odin mcp`.
33
+
34
+ ## License
35
+
36
+ Free to use; not open source. See [LICENSE.md](LICENSE.md).
package/bin/odin.js ADDED
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+ // Launcher for the prebuilt `odin` binary. npm installs exactly one of the
4
+ // @arodroz/odin-<platform> optional dependencies (their os/cpu fields filter the
5
+ // rest); this finds it and runs it with stdio passed straight through, so
6
+ // `odin mcp` speaks MCP over the same pipes the client opened.
7
+
8
+ const { spawnSync } = require('child_process');
9
+
10
+ const PLATFORMS = {
11
+ 'win32 x64': '@arodroz/odin-win32-x64',
12
+ 'darwin x64': '@arodroz/odin-darwin-x64',
13
+ 'darwin arm64': '@arodroz/odin-darwin-arm64',
14
+ 'linux x64': '@arodroz/odin-linux-x64',
15
+ 'linux arm64': '@arodroz/odin-linux-arm64',
16
+ };
17
+
18
+ // resolveBinary maps a host to its binary path, or to an error message that
19
+ // says what to do. resolve is require.resolve, injectable for tests.
20
+ function resolveBinary(platform, arch, resolve) {
21
+ const host = `${platform} ${arch}`;
22
+ const pkg = PLATFORMS[host];
23
+ if (!pkg) {
24
+ return { error: `@arodroz/odin: no prebuilt odin binary for ${host}. Supported: ${Object.keys(PLATFORMS).join(', ')}.` };
25
+ }
26
+ const file = `${pkg}/bin/odin${platform === 'win32' ? '.exe' : ''}`;
27
+ try {
28
+ return { path: resolve(file) };
29
+ } catch {
30
+ return {
31
+ error: `@arodroz/odin: the platform package ${pkg} is not installed. ` +
32
+ 'It is an optional dependency: reinstall without --no-optional / --omit=optional.',
33
+ };
34
+ }
35
+ }
36
+
37
+ function main() {
38
+ const r = resolveBinary(process.platform, process.arch, require.resolve);
39
+ if (r.error) {
40
+ console.error(r.error);
41
+ process.exit(2);
42
+ }
43
+ // Resolve-only mode, for callers that run the binary themselves: the plugin's
44
+ // hook resolves once through npx, caches the path, and skips npm's startup
45
+ // cost on every later edit.
46
+ if (process.env.ANTERAS_ODIN_PRINT_PATH === '1') {
47
+ process.stdout.write(r.path + '\n');
48
+ process.exit(0);
49
+ }
50
+ const child = spawnSync(r.path, process.argv.slice(2), { stdio: 'inherit' });
51
+ if (child.error) {
52
+ console.error(`@arodroz/odin: cannot run ${r.path}: ${child.error.message}`);
53
+ process.exit(2);
54
+ }
55
+ if (child.signal) process.kill(process.pid, child.signal);
56
+ process.exit(child.status === null ? 1 : child.status);
57
+ }
58
+
59
+ if (require.main === module) main();
60
+
61
+ module.exports = { resolveBinary, PLATFORMS };
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@arodroz/odin",
3
+ "version": "1.27.0",
4
+ "description": "The canonical NIPO ODIN analysis engine: diagnostics, structural map, corpus audit and language reference, as a CLI and MCP server.",
5
+ "bin": {
6
+ "odin": "bin/odin.js"
7
+ },
8
+ "optionalDependencies": {
9
+ "@arodroz/odin-win32-x64": "1.27.0",
10
+ "@arodroz/odin-darwin-x64": "1.27.0",
11
+ "@arodroz/odin-darwin-arm64": "1.27.0",
12
+ "@arodroz/odin-linux-x64": "1.27.0",
13
+ "@arodroz/odin-linux-arm64": "1.27.0"
14
+ },
15
+ "engines": {
16
+ "node": ">=18"
17
+ },
18
+ "license": "SEE LICENSE IN LICENSE.md",
19
+ "homepage": "https://github.com/arodroz/odin-plugins",
20
+ "keywords": [
21
+ "odin",
22
+ "nipo",
23
+ "nfield",
24
+ "survey",
25
+ "questionnaire",
26
+ "mcp",
27
+ "mcp-server"
28
+ ]
29
+ }