@convesoft/mara 0.1.0-alpha.0 → 0.1.0-alpha.2

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 CHANGED
@@ -14,9 +14,9 @@ baseline.
14
14
  Pin the exact version so an MCP restart cannot silently change behavior:
15
15
 
16
16
  ```bash
17
- npx -y @convesoft/mara@0.1.0-alpha.0 --version
18
- npx -y @convesoft/mara@0.1.0-alpha.0 project init ./example
19
- npx -y @convesoft/mara@0.1.0-alpha.0 --project ./example project validate
17
+ npx -y @convesoft/mara@0.1.0-alpha.2 --version
18
+ npx -y @convesoft/mara@0.1.0-alpha.2 project init ./example
19
+ npx -y @convesoft/mara@0.1.0-alpha.2 --project ./example project validate
20
20
  ```
21
21
 
22
22
  The npm packages contain prebuilt native binaries and use no install scripts.
@@ -29,17 +29,59 @@ For a client that starts stdio servers in the project directory:
29
29
  ```toml
30
30
  [mcp_servers.mara]
31
31
  command = "npx"
32
- args = ["-y", "@convesoft/mara@0.1.0-alpha.0", "mcp"]
32
+ args = ["-y", "@convesoft/mara@0.1.0-alpha.2", "mcp"]
33
33
  ```
34
34
 
35
- If the client starts elsewhere, add an explicit project root before `mcp`:
35
+ To bind the server to one project regardless of its execution directory, place
36
+ `--project` after `mcp`:
36
37
 
37
- ```text
38
- --project /absolute/path/to/project
38
+ ```toml
39
+ [mcp_servers.mara]
40
+ command = "npx"
41
+ args = [
42
+ "-y",
43
+ "@convesoft/mara@0.1.0-alpha.2",
44
+ "mcp",
45
+ "--project",
46
+ "/absolute/path/to/project",
47
+ ]
48
+ ```
49
+
50
+ Without `--project`, the server can start anywhere. Project-bound tools accept
51
+ an absolute `project` path or discover the nearest parent containing
52
+ `.mara/project.toml` from the server's execution directory.
53
+
54
+ ## Configure Codex
55
+
56
+ Register the installed Mara executable as an MCP server and install the Mara
57
+ skill separately:
58
+
59
+ ```bash
60
+ codex mcp add mara -- npx -y @convesoft/mara@0.1.0-alpha.2 mcp
61
+ npx skills add convesoft/mara --skill mara -g -a codex
62
+ ```
63
+
64
+ If Mara is already installed, register its absolute executable path instead:
65
+
66
+ ```bash
67
+ codex mcp add mara -- /absolute/path/to/mara mcp
68
+ ```
69
+
70
+ The skill and MCP server expose the same Mara operations without installing a
71
+ second executable or depending on a client's plugin-cache layout.
72
+
73
+ The npm package also contains an optional portable Agent Plugins 1.0 manifest,
74
+ skill, and MCP configuration. Compatible clients may install the complete
75
+ package through the Convesoft marketplace as a convenience:
76
+
77
+ ```bash
78
+ codex plugin marketplace add convesoft/mara
79
+ codex plugin add mara@convesoft
39
80
  ```
40
81
 
41
- Mara discovers the nearest parent containing `.mara/project.toml` and binds one
42
- project when the MCP server starts.
82
+ The complete plugin is not a release compatibility target. Do not install it
83
+ alongside an equivalent manually configured Mara MCP server. Neither onboarding
84
+ route modifies project `AGENTS.md`.
43
85
 
44
86
  ## Core workflow
45
87
 
@@ -56,8 +98,12 @@ mara item get REQ-EXAMPLE
56
98
 
57
99
  Run `mara --help` or `mara <object> <operation> --help` for the complete command
58
100
  surface. The canonical alpha behavior is documented in
59
- [`docs/alpha.mara.md`](docs/alpha.mara.md); distribution and release guarantees
60
- are in [`docs/distribution.mara.md`](docs/distribution.mara.md).
101
+ [`docs/alpha.mara.md`](docs/alpha.mara.md). Structured update, move, rename,
102
+ delete, and recovery follow [`docs/editing.mara.md`](docs/editing.mara.md).
103
+ For existing projects whose items lack machine identities, run
104
+ `mara project mid backfill`, then `mara project validate` before editing.
105
+ Distribution and release guarantees are in
106
+ [`docs/distribution.mara.md`](docs/distribution.mara.md).
61
107
 
62
108
  ## Development
63
109
 
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env node
2
+
3
+ "use strict";
4
+
5
+ const path = require("node:path");
6
+ const { spawn } = require("node:child_process");
7
+
8
+ const packages = new Map([
9
+ ["linux:x64", "@convesoft/mara-linux-x64-gnu"],
10
+ ["linux:arm64", "@convesoft/mara-linux-arm64-gnu"],
11
+ ["darwin:x64", "@convesoft/mara-darwin-x64"],
12
+ ["darwin:arm64", "@convesoft/mara-darwin-arm64"],
13
+ ]);
14
+
15
+ const manifest = require("../package.json");
16
+ const packageName = packages.get(`${process.platform}:${process.arch}`);
17
+ let hasLocalRuntime = false;
18
+
19
+ if (packageName !== undefined) {
20
+ try {
21
+ require.resolve(`${packageName}/package.json`);
22
+ hasLocalRuntime = true;
23
+ } catch {
24
+ // Codex extracts npm plugin packages without installing their dependencies.
25
+ }
26
+ }
27
+
28
+ const command = hasLocalRuntime ? process.execPath : "npx";
29
+ const args = hasLocalRuntime
30
+ ? [path.join(__dirname, "mara.cjs"), ...process.argv.slice(2)]
31
+ : ["--yes", `${manifest.name}@${manifest.version}`, ...process.argv.slice(2)];
32
+ const child = spawn(command, args, {
33
+ cwd: hasLocalRuntime ? undefined : path.parse(__dirname).root,
34
+ stdio: "inherit",
35
+ });
36
+ const signals = ["SIGINT", "SIGTERM", "SIGHUP"];
37
+ const forward = new Map();
38
+
39
+ for (const signal of signals) {
40
+ const handler = () => child.kill(signal);
41
+ forward.set(signal, handler);
42
+ process.on(signal, handler);
43
+ }
44
+
45
+ child.once("error", (error) => {
46
+ console.error(`Could not start Mara from the Agent Plugin: ${error.message}`);
47
+ process.exitCode = 1;
48
+ });
49
+
50
+ child.once("exit", (code, signal) => {
51
+ for (const [name, handler] of forward) {
52
+ process.off(name, handler);
53
+ }
54
+
55
+ if (signal !== null) {
56
+ process.kill(process.pid, signal);
57
+ } else {
58
+ process.exitCode = code ?? 1;
59
+ }
60
+ });
package/mcp.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
3
+ "mcpServers": {
4
+ "mara": {
5
+ "type": "stdio",
6
+ "command": "node",
7
+ "args": ["${PLUGIN_ROOT}/bin/mara-plugin.cjs", "mcp"]
8
+ }
9
+ }
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@convesoft/mara",
3
- "version": "0.1.0-alpha.0",
3
+ "version": "0.1.0-alpha.2",
4
4
  "description": "Structured project knowledge CLI and MCP server",
5
5
  "author": "Aliaksei Raketski",
6
6
  "license": "MIT OR Apache-2.0",
@@ -18,13 +18,17 @@
18
18
  "node": ">=18"
19
19
  },
20
20
  "optionalDependencies": {
21
- "@convesoft/mara-linux-x64-gnu": "0.1.0-alpha.0",
22
- "@convesoft/mara-linux-arm64-gnu": "0.1.0-alpha.0",
23
- "@convesoft/mara-darwin-x64": "0.1.0-alpha.0",
24
- "@convesoft/mara-darwin-arm64": "0.1.0-alpha.0"
21
+ "@convesoft/mara-linux-x64-gnu": "0.1.0-alpha.2",
22
+ "@convesoft/mara-linux-arm64-gnu": "0.1.0-alpha.2",
23
+ "@convesoft/mara-darwin-x64": "0.1.0-alpha.2",
24
+ "@convesoft/mara-darwin-arm64": "0.1.0-alpha.2"
25
25
  },
26
26
  "files": [
27
27
  "bin/mara.cjs",
28
+ "bin/mara-plugin.cjs",
29
+ "plugin.json",
30
+ "mcp.json",
31
+ "skills/mara/SKILL.md",
28
32
  "README.md",
29
33
  "LICENSE-MIT",
30
34
  "LICENSE-APACHE"
package/plugin.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
+ "name": "mara",
4
+ "description": "Discover, author, relate, and validate structured project knowledge.",
5
+ "author": {
6
+ "name": "Convesoft",
7
+ "url": "https://github.com/convesoft"
8
+ },
9
+ "homepage": "https://github.com/convesoft/mara",
10
+ "repository": "https://github.com/convesoft/mara",
11
+ "license": "MIT OR Apache-2.0",
12
+ "keywords": [
13
+ "project-knowledge",
14
+ "requirements",
15
+ "mcp",
16
+ "agent-skill"
17
+ ],
18
+ "version": "0.1.0-alpha.2"
19
+ }
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: mara
3
+ description: Use Mara to initialize, discover, author, relate, retrieve, search, or validate structured project knowledge in Git-tracked *.mara.md files.
4
+ ---
5
+
6
+ # Mara project knowledge
7
+
8
+ Use the Mara MCP tools as the structured interface to a project's canonical
9
+ `*.mara.md` knowledge.
10
+
11
+ ## Select the project
12
+
13
+ - Resolve the intended project root to an absolute path.
14
+ - Pass that path as `project` on every project-bound tool call unless the MCP
15
+ server was explicitly started with `mara mcp --project PATH`.
16
+ - If `project` is omitted, Mara discovers the nearest project from the MCP
17
+ server's execution directory.
18
+ - Treat each operation as scoped to one project. Do not infer workspace or
19
+ cross-project behavior.
20
+
21
+ If the intended root has no `.mara/project.toml` and the user wants to start a
22
+ Mara project, call `project_init` with the absolute root, or omit `project` when
23
+ the MCP server was started with that root bound by `--project`. Use the default
24
+ `minimal` template unless the user explicitly requests `empty`. Do not create
25
+ or modify `AGENTS.md` as part of Mara onboarding.
26
+
27
+ ## Work with the corpus
28
+
29
+ 1. Call `schema_get` before authoring unfamiliar flavours, fields, or relations.
30
+ 2. Use `item_search`, `item_list`, and `item_related` for bounded discovery;
31
+ call `item_get` only for selected full items.
32
+ 3. Use `item_create`, `item_update`, `item_move`, `item_rename`, `item_delete`,
33
+ `relation_add`, and `relation_remove` only when the user has asked to change
34
+ project knowledge.
35
+ 4. Run the narrowest relevant validation after a mutation and use
36
+ `project_validate` when the requested work affects corpus-wide integrity.
37
+
38
+ Mara source files remain canonical. Do not treat MCP results as a separate
39
+ authoring store. Use `item_update` for partial title, custom-field, or body edits;
40
+ use `item_move` to relocate an item while preserving identity. Update warnings
41
+ about existing scaffold bodies still count as errors in explicit validation.
42
+ Use `item_delete` to remove an item only when no surviving typed relations or
43
+ supported wiki mentions refer to it; resolve reported blockers explicitly.
44
+ Use `item_rename` to change a human ID and supported internal references while
45
+ preserving the MID. Pending transactions block mutations; use
46
+ `project_transaction_rollback` for explicit recovery after stopping other writers.