@lamentis/naome 1.0.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.
Files changed (49) hide show
  1. package/Cargo.lock +199 -0
  2. package/Cargo.toml +11 -0
  3. package/LICENSE +21 -0
  4. package/README.md +6 -0
  5. package/bin/naome-node.js +1424 -0
  6. package/bin/naome.js +129 -0
  7. package/crates/naome-cli/Cargo.toml +14 -0
  8. package/crates/naome-cli/src/main.rs +341 -0
  9. package/crates/naome-core/Cargo.toml +11 -0
  10. package/crates/naome-core/src/decision.rs +432 -0
  11. package/crates/naome-core/src/git.rs +70 -0
  12. package/crates/naome-core/src/harness_health.rs +557 -0
  13. package/crates/naome-core/src/install_plan.rs +82 -0
  14. package/crates/naome-core/src/lib.rs +17 -0
  15. package/crates/naome-core/src/models.rs +99 -0
  16. package/crates/naome-core/src/paths.rs +72 -0
  17. package/crates/naome-core/src/task_state.rs +1859 -0
  18. package/crates/naome-core/src/verification.rs +217 -0
  19. package/crates/naome-core/src/verification_contract.rs +406 -0
  20. package/crates/naome-core/tests/decision.rs +297 -0
  21. package/crates/naome-core/tests/harness_health.rs +232 -0
  22. package/crates/naome-core/tests/install_plan.rs +35 -0
  23. package/crates/naome-core/tests/task_state.rs +588 -0
  24. package/crates/naome-core/tests/verification.rs +165 -0
  25. package/crates/naome-core/tests/verification_contract.rs +181 -0
  26. package/native/darwin-arm64/naome +0 -0
  27. package/package.json +44 -0
  28. package/templates/naome-root/.naome/bin/check-harness-health.js +163 -0
  29. package/templates/naome-root/.naome/bin/check-task-state.js +180 -0
  30. package/templates/naome-root/.naome/bin/naome.js +306 -0
  31. package/templates/naome-root/.naome/init-state.json +13 -0
  32. package/templates/naome-root/.naome/manifest.json +45 -0
  33. package/templates/naome-root/.naome/package.json +3 -0
  34. package/templates/naome-root/.naome/task-contract.schema.json +174 -0
  35. package/templates/naome-root/.naome/task-state.json +8 -0
  36. package/templates/naome-root/.naome/upgrade-state.json +7 -0
  37. package/templates/naome-root/.naome/verification.json +45 -0
  38. package/templates/naome-root/.naomeignore +4 -0
  39. package/templates/naome-root/AGENTS.md +77 -0
  40. package/templates/naome-root/docs/naome/agent-workflow.md +82 -0
  41. package/templates/naome-root/docs/naome/architecture.md +37 -0
  42. package/templates/naome-root/docs/naome/decisions.md +18 -0
  43. package/templates/naome-root/docs/naome/execution.md +192 -0
  44. package/templates/naome-root/docs/naome/first-run.md +135 -0
  45. package/templates/naome-root/docs/naome/index.md +67 -0
  46. package/templates/naome-root/docs/naome/repo-profile.md +51 -0
  47. package/templates/naome-root/docs/naome/security.md +60 -0
  48. package/templates/naome-root/docs/naome/testing.md +51 -0
  49. package/templates/naome-root/docs/naome/upgrade.md +20 -0
@@ -0,0 +1,180 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { existsSync, readFileSync } = require("node:fs");
4
+ const { createHash } = require("node:crypto");
5
+ const { dirname, join, resolve } = require("node:path");
6
+ const { spawnSync } = require("node:child_process");
7
+
8
+ const nativeBinaryRelativePath = process.platform === "win32" ? ".naome/bin/naome-rust.exe" : ".naome/bin/naome-rust";
9
+ const nativeBinaryName = process.platform === "win32" ? "naome.exe" : "naome";
10
+
11
+ const expectedMachineOwnedIntegrity = Object.freeze({
12
+ "AGENTS.md": "sha256:ebe589ce85b43d4aa23014d8a26a49bd33dc52ef1bba68e4f63a7e86640be06a",
13
+ ".naome/package.json": "sha256:8005a3491db7d92f36ac66369861589f9c47123d3a7c71e643fc2c06168cd45a",
14
+ ".naome/bin/naome.js": "sha256:1b63729dc55730a826193d35cf78e755a991b356ac81b45f4aa3fcf24c8152fa",
15
+ ".naome/bin/check-task-state.js": "sha256:43c02868072d0d13499aefba2e9a5ec9517d59539fd19ff0f11e3e4623a51b44",
16
+ ".naome/bin/check-harness-health.js": "sha256:dce2a380022dd63d86bd762869debafbc635ab3d7e8fae985e2d429d8ee437ad",
17
+ ".naome/task-contract.schema.json": "sha256:c806416d4944eaed6dc48b3760fd0dd5b9b5a7c9ab895697fe36b54c41c1332f",
18
+ "docs/naome/index.md": "sha256:75c4cdf9edcd46c83a619cbfc551e96cae35bcff694d955ebab4624125ae7f12",
19
+ "docs/naome/first-run.md": "sha256:a1dd0bd17ec9d71955a473cd2c4a615538e89a7d81e8f4e1015a50ab9efe3558",
20
+ "docs/naome/agent-workflow.md": "sha256:5e5b26e7896f95a9154abcd133f08b33f84fddc679757ed15c043a91e319fb4e",
21
+ "docs/naome/execution.md": "sha256:3d67fd9922a66a66f79f920adbb24dcd47eefdfde835a5351a27ffed932dcfea",
22
+ "docs/naome/upgrade.md": "sha256:2c60f0441bbd98bd528d109b30a7ded4b0ad55d61ffb9f52edac9e93b7999cb1"
23
+ });
24
+
25
+ function main(argv) {
26
+ const root = findHarnessRoot(process.cwd()) || resolve(__dirname, "..", "..");
27
+ const nativeBinary = resolveNativeDecisionBinary(root);
28
+
29
+ const result = spawnSync(nativeBinary, ["check-task-state", "--root", root, ...modeArgs(argv)], {
30
+ cwd: root,
31
+ encoding: "utf8",
32
+ env: {
33
+ ...process.env,
34
+ NAOME_EXPECTED_INTEGRITY_JSON: JSON.stringify(expectedMachineOwnedIntegrity)
35
+ },
36
+ stdio: "inherit"
37
+ });
38
+
39
+ process.exit(result.status === null ? 1 : result.status);
40
+ }
41
+
42
+ function modeArgs(argv) {
43
+ if (argv.includes("--admission")) {
44
+ return ["--admission"];
45
+ }
46
+
47
+ if (argv.includes("--progress")) {
48
+ return ["--progress"];
49
+ }
50
+
51
+ if (argv.includes("--commit-gate")) {
52
+ return ["--commit-gate"];
53
+ }
54
+
55
+ if (argv.includes("--push-gate")) {
56
+ return ["--push-gate"];
57
+ }
58
+
59
+ return [];
60
+ }
61
+
62
+ function resolveNativeDecisionBinary(root) {
63
+ const expectedIntegrity = expectedNativeIntegrity(root);
64
+ const candidates = [
65
+ process.env.NAOME_NATIVE_BIN,
66
+ join(root, nativeBinaryRelativePath),
67
+ join(root, "packages", "naome", "target", "release", nativeBinaryName),
68
+ join(root, "packages", "naome", "target", "debug", nativeBinaryName)
69
+ ].filter(Boolean);
70
+
71
+ for (const candidate of candidates) {
72
+ if (isUsableNativeBinary(candidate, root, expectedIntegrity)) {
73
+ return candidate;
74
+ }
75
+ }
76
+
77
+ if (expectedIntegrity) {
78
+ fail(`No runnable NAOME native task-state binary matched ${expectedIntegrity}. Run naome sync again.`);
79
+ }
80
+
81
+ const built = buildSourceNativeBinary(root);
82
+ if (built && isUsableNativeBinary(built, root, null)) {
83
+ return built;
84
+ }
85
+
86
+ fail("NAOME native task-state binary is missing or incompatible. Run naome sync again.");
87
+ }
88
+
89
+ function expectedNativeIntegrity(root) {
90
+ if (isIntegrityHash(process.env.NAOME_EXPECTED_NATIVE_INTEGRITY)) {
91
+ return process.env.NAOME_EXPECTED_NATIVE_INTEGRITY;
92
+ }
93
+
94
+ const manifestPath = join(root, ".naome", "manifest.json");
95
+ if (!existsSync(manifestPath)) {
96
+ return null;
97
+ }
98
+
99
+ let manifest;
100
+ try {
101
+ manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
102
+ } catch {
103
+ return null;
104
+ }
105
+
106
+ const expected = manifest.integrity?.[nativeBinaryRelativePath];
107
+ if (!isIntegrityHash(expected)) {
108
+ return null;
109
+ }
110
+
111
+ return expected;
112
+ }
113
+
114
+ function isUsableNativeBinary(candidate, root, expectedIntegrity) {
115
+ if (!candidate || !existsSync(candidate)) {
116
+ return false;
117
+ }
118
+
119
+ if (expectedIntegrity) {
120
+ const actual = `sha256:${createHash("sha256").update(readFileSync(candidate)).digest("hex")}`;
121
+ if (actual !== expectedIntegrity) {
122
+ return false;
123
+ }
124
+ }
125
+
126
+ const probe = spawnSync(candidate, [], {
127
+ cwd: root,
128
+ encoding: "utf8",
129
+ stdio: "ignore"
130
+ });
131
+ return !probe.error && probe.status !== null;
132
+ }
133
+
134
+ function buildSourceNativeBinary(root) {
135
+ const manifestPath = join(root, "packages", "naome", "Cargo.toml");
136
+ if (!existsSync(manifestPath)) {
137
+ return null;
138
+ }
139
+
140
+ const result = spawnSync("cargo", ["build", "--release", "--manifest-path", manifestPath, "-p", "naome-cli"], {
141
+ cwd: root,
142
+ encoding: "utf8",
143
+ stdio: "ignore"
144
+ });
145
+ if (result.status !== 0) {
146
+ return null;
147
+ }
148
+
149
+ const builtPath = join(root, "packages", "naome", "target", "release", nativeBinaryName);
150
+ return existsSync(builtPath) ? builtPath : null;
151
+ }
152
+
153
+ function findHarnessRoot(startPath) {
154
+ let current = resolve(startPath);
155
+
156
+ while (true) {
157
+ if (existsSync(join(current, ".naome", "task-state.json"))) {
158
+ return current;
159
+ }
160
+
161
+ const parent = dirname(current);
162
+ if (parent === current) {
163
+ return null;
164
+ }
165
+
166
+ current = parent;
167
+ }
168
+ }
169
+
170
+ function isIntegrityHash(value) {
171
+ return typeof value === "string" && /^sha256:[a-f0-9]{64}$/.test(value);
172
+ }
173
+
174
+ function fail(message) {
175
+ console.error("NAOME task state check failed.");
176
+ console.error(`- ${message}`);
177
+ process.exit(1);
178
+ }
179
+
180
+ main(process.argv.slice(2));
@@ -0,0 +1,306 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { existsSync, readFileSync } = require("node:fs");
4
+ const { createHash } = require("node:crypto");
5
+ const { spawnSync } = require("node:child_process");
6
+ const { dirname, join, resolve } = require("node:path");
7
+
8
+ const nativeBinaryRelativePath = process.platform === "win32" ? ".naome/bin/naome-rust.exe" : ".naome/bin/naome-rust";
9
+ const nativeBinaryName = process.platform === "win32" ? "naome.exe" : "naome";
10
+ const expectedNativeBinaryIntegrity = "sha256:generated";
11
+
12
+ function main(argv) {
13
+ const [command, ...args] = argv;
14
+
15
+ if (isHelpRequest(argv)) {
16
+ printHelp();
17
+ process.exit(0);
18
+ }
19
+
20
+ if (command === "commit") {
21
+ commit(args);
22
+ return;
23
+ }
24
+
25
+ if (command === "install" || command === "sync") {
26
+ installOrSync(command, args);
27
+ return;
28
+ }
29
+
30
+ if (command === "status" || command === "next") {
31
+ runNativeDecisionCommand(command, args);
32
+ return;
33
+ }
34
+
35
+ printHelp();
36
+ process.exit(command ? 1 : 0);
37
+ }
38
+
39
+ function isHelpRequest(args) {
40
+ return ["help", "--help", "-h"].includes(args[0]) || ["help", "--help", "-h"].includes(args[1]);
41
+ }
42
+
43
+ function runNativeDecisionCommand(command, args) {
44
+ const root = findHarnessRoot(process.cwd());
45
+ if (!root) {
46
+ fail("NAOME harness root not found. Run this inside a repository with .naome/task-state.json.");
47
+ }
48
+
49
+ const nativeBinary = resolveNativeDecisionBinary(root);
50
+ verifyNativeBinary(nativeBinary);
51
+
52
+ const result = spawnSync(nativeBinary, [command, ...args], {
53
+ cwd: root,
54
+ encoding: "utf8",
55
+ env: {
56
+ ...process.env,
57
+ NAOME_NODE_BIN: process.execPath
58
+ },
59
+ stdio: "inherit"
60
+ });
61
+
62
+ process.exit(result.status === null ? 1 : result.status);
63
+ }
64
+
65
+ function resolveNativeDecisionBinary(root) {
66
+ const candidates = [
67
+ process.env.NAOME_NATIVE_BIN,
68
+ join(root, nativeBinaryRelativePath),
69
+ join(root, "packages", "naome", "target", "release", nativeBinaryName),
70
+ join(root, "packages", "naome", "target", "debug", nativeBinaryName)
71
+ ].filter(Boolean);
72
+
73
+ for (const candidate of candidates) {
74
+ if (isUsableNativeBinary(candidate, root)) {
75
+ return candidate;
76
+ }
77
+ }
78
+
79
+ const built = buildSourceNativeBinary(root);
80
+ if (built && isUsableNativeBinary(built, root)) {
81
+ return built;
82
+ }
83
+
84
+ fail("NAOME native decision binary is missing or incompatible. Run naome sync again, or set NAOME_NATIVE_BIN to a built naome binary.");
85
+ }
86
+
87
+ function isUsableNativeBinary(candidate, root) {
88
+ if (!candidate || !existsSync(candidate)) {
89
+ return false;
90
+ }
91
+
92
+ if (expectedNativeBinaryIntegrity === "sha256:generated") {
93
+ return isRunnableNativeBinary(candidate, root);
94
+ }
95
+
96
+ const actual = `sha256:${createHash("sha256").update(readFileSync(candidate)).digest("hex")}`;
97
+ if (actual !== expectedNativeBinaryIntegrity) {
98
+ return false;
99
+ }
100
+
101
+ return isRunnableNativeBinary(candidate, root);
102
+ }
103
+
104
+ function isRunnableNativeBinary(candidate, root) {
105
+ const probe = spawnSync(candidate, [], {
106
+ cwd: root,
107
+ encoding: "utf8",
108
+ stdio: "ignore"
109
+ });
110
+ return !probe.error && probe.status !== null;
111
+ }
112
+
113
+ function buildSourceNativeBinary(root) {
114
+ if (expectedNativeBinaryIntegrity !== "sha256:generated") {
115
+ return null;
116
+ }
117
+
118
+ const manifestPath = join(root, "packages", "naome", "Cargo.toml");
119
+ if (!existsSync(manifestPath)) {
120
+ return null;
121
+ }
122
+
123
+ const result = spawnSync("cargo", ["build", "--release", "--manifest-path", manifestPath, "-p", "naome-cli"], {
124
+ cwd: root,
125
+ encoding: "utf8",
126
+ stdio: "ignore"
127
+ });
128
+ if (result.status !== 0) {
129
+ return null;
130
+ }
131
+
132
+ const builtPath = join(root, "packages", "naome", "target", "release", nativeBinaryName);
133
+ return existsSync(builtPath) ? builtPath : null;
134
+ }
135
+
136
+ function verifyNativeBinary(nativeBinary) {
137
+ if (!isUsableNativeBinary(nativeBinary, findHarnessRoot(process.cwd()) || process.cwd())) {
138
+ fail("NAOME native decision binary failed integrity or compatibility checks.");
139
+ }
140
+ }
141
+
142
+ function commit(args) {
143
+ const root = findHarnessRoot(process.cwd());
144
+ if (!root) {
145
+ fail("NAOME harness root not found. Run this inside a repository with .naome/task-state.json.");
146
+ }
147
+
148
+ const message = parseCommitMessage(args) || defaultCommitMessage(root);
149
+ const taskState = readTaskState(root);
150
+
151
+ if (taskState.status !== "complete") {
152
+ fail(`naome commit requires task-state status complete. Current status: ${taskState.status}.`);
153
+ }
154
+
155
+ runOrExit(root, [process.execPath, [join(root, ".naome", "bin", "check-task-state.js")]]);
156
+
157
+ const changedPaths = readChangedPaths(root);
158
+ if (changedPaths.length === 0) {
159
+ fail("Nothing to commit.");
160
+ }
161
+
162
+ runGitOrExit(root, ["add", "-A", "--", "."]);
163
+ runOrExit(root, [process.execPath, [join(root, ".naome", "bin", "check-task-state.js"), "--commit-gate"]]);
164
+ runGitOrExit(root, ["commit", "-m", message]);
165
+
166
+ console.log(`NAOME committed task ${taskState.activeTask?.id || "unknown"}.`);
167
+ }
168
+
169
+ function parseCommitMessage(args) {
170
+ for (let index = 0; index < args.length; index += 1) {
171
+ const arg = args[index];
172
+ if ((arg === "-m" || arg === "--message") && args[index + 1]) {
173
+ return args[index + 1];
174
+ }
175
+
176
+ if (arg.startsWith("--message=")) {
177
+ return arg.slice("--message=".length);
178
+ }
179
+ }
180
+
181
+ return null;
182
+ }
183
+
184
+ function defaultCommitMessage(root) {
185
+ const taskState = readTaskState(root);
186
+ const taskId = taskState.activeTask?.id || "task";
187
+ return `chore(naome): baseline ${taskId}`;
188
+ }
189
+
190
+ function readTaskState(root) {
191
+ const taskStatePath = join(root, ".naome", "task-state.json");
192
+ try {
193
+ return JSON.parse(readFileSync(taskStatePath, "utf8"));
194
+ } catch (error) {
195
+ fail(`Cannot read .naome/task-state.json: ${error.message}`);
196
+ }
197
+ }
198
+
199
+ function readChangedPaths(root) {
200
+ const result = runGit(root, ["status", "--porcelain"]);
201
+ if (result.status !== 0) {
202
+ fail(`git status failed: ${result.stderr.trim() || result.stdout.trim()}`);
203
+ }
204
+
205
+ return result.stdout.split(/\r?\n/).filter((line) => line.trim().length > 0);
206
+ }
207
+
208
+ function runOrExit(root, command) {
209
+ const [bin, args] = command;
210
+ const result = spawnSync(bin, args, {
211
+ cwd: root,
212
+ encoding: "utf8",
213
+ stdio: "inherit"
214
+ });
215
+
216
+ if (result.status !== 0) {
217
+ process.exit(result.status || 1);
218
+ }
219
+ }
220
+
221
+ function runGitOrExit(root, args) {
222
+ const result = runGit(root, args, { stdio: "inherit" });
223
+ if (result.status !== 0) {
224
+ process.exit(result.status || 1);
225
+ }
226
+ }
227
+
228
+ function runGit(root, args, options = {}) {
229
+ return spawnSync("git", args, {
230
+ cwd: root,
231
+ encoding: "utf8",
232
+ stdio: options.stdio || "pipe"
233
+ });
234
+ }
235
+
236
+ function findHarnessRoot(startPath) {
237
+ let current = resolve(startPath);
238
+
239
+ while (true) {
240
+ if (existsSync(join(current, ".naome", "task-state.json"))) {
241
+ return current;
242
+ }
243
+
244
+ const parent = dirname(current);
245
+ if (parent === current) {
246
+ return null;
247
+ }
248
+
249
+ current = parent;
250
+ }
251
+ }
252
+
253
+ function printHelp() {
254
+ console.log("Usage:");
255
+ console.log(" naome status [--json]");
256
+ console.log(" naome next [--json]");
257
+ console.log(" naome install");
258
+ console.log(" naome sync");
259
+ console.log(" naome commit -m \"type(scope): message\"");
260
+ console.log(" node .naome/bin/naome.js commit -m \"type(scope): message\"");
261
+ }
262
+
263
+ function fail(message) {
264
+ console.error(`NAOME: ${message}`);
265
+ process.exit(1);
266
+ }
267
+
268
+ function installOrSync(command, args) {
269
+ const root = findHarnessRoot(process.cwd()) || process.cwd();
270
+ const packageRoot = sourcePackageRoot(root);
271
+ if (packageRoot) {
272
+ const nativeBinary = resolveNativeDecisionBinary(root);
273
+ verifyNativeBinary(nativeBinary);
274
+ const result = spawnSync(nativeBinary, [
275
+ command,
276
+ "--package-root",
277
+ packageRoot,
278
+ "--installer-js",
279
+ join(packageRoot, "bin", "naome-node.js"),
280
+ ...args
281
+ ], {
282
+ cwd: root,
283
+ encoding: "utf8",
284
+ env: {
285
+ ...process.env,
286
+ NAOME_NODE_BIN: process.execPath
287
+ },
288
+ stdio: "inherit"
289
+ });
290
+ process.exit(result.status === null ? 1 : result.status);
291
+ }
292
+
293
+ const result = spawnSync("npm", ["create", "naome"], {
294
+ cwd: root,
295
+ encoding: "utf8",
296
+ stdio: "inherit"
297
+ });
298
+ process.exit(result.status === null ? 1 : result.status);
299
+ }
300
+
301
+ function sourcePackageRoot(root) {
302
+ const candidate = join(root, "packages", "naome");
303
+ return existsSync(join(candidate, "bin", "naome-node.js")) ? candidate : null;
304
+ }
305
+
306
+ main(process.argv.slice(2));
@@ -0,0 +1,13 @@
1
+ {
2
+ "initialized": false,
3
+ "intakeStatus": "not_started",
4
+ "initializedAt": null,
5
+ "initializedBy": null,
6
+ "blockedReason": null,
7
+ "requiredDocs": [
8
+ "docs/naome/repo-profile.md",
9
+ "docs/naome/testing.md",
10
+ "docs/naome/architecture.md",
11
+ "docs/naome/security.md"
12
+ ]
13
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "naome",
3
+ "harnessVersion": "1.0.0",
4
+ "profile": "standard",
5
+ "installedAt": null,
6
+ "machineOwned": [
7
+ "AGENTS.md",
8
+ ".naome/package.json",
9
+ ".naome/bin/naome.js",
10
+ ".naome/bin/check-task-state.js",
11
+ ".naome/bin/check-harness-health.js",
12
+ ".naome/task-contract.schema.json",
13
+ "docs/naome/index.md",
14
+ "docs/naome/first-run.md",
15
+ "docs/naome/agent-workflow.md",
16
+ "docs/naome/execution.md",
17
+ "docs/naome/upgrade.md"
18
+ ],
19
+ "projectOwned": [
20
+ ".naomeignore",
21
+ ".naome/init-state.json",
22
+ ".naome/manifest.json",
23
+ ".naome/task-state.json",
24
+ ".naome/upgrade-state.json",
25
+ ".naome/verification.json",
26
+ "docs/naome/architecture.md",
27
+ "docs/naome/decisions.md",
28
+ "docs/naome/repo-profile.md",
29
+ "docs/naome/security.md",
30
+ "docs/naome/testing.md"
31
+ ],
32
+ "integrity": {
33
+ "AGENTS.md": "sha256:ebe589ce85b43d4aa23014d8a26a49bd33dc52ef1bba68e4f63a7e86640be06a",
34
+ ".naome/package.json": "sha256:8005a3491db7d92f36ac66369861589f9c47123d3a7c71e643fc2c06168cd45a",
35
+ ".naome/bin/naome.js": "sha256:1b63729dc55730a826193d35cf78e755a991b356ac81b45f4aa3fcf24c8152fa",
36
+ ".naome/bin/check-task-state.js": "sha256:43c02868072d0d13499aefba2e9a5ec9517d59539fd19ff0f11e3e4623a51b44",
37
+ ".naome/bin/check-harness-health.js": "sha256:dce2a380022dd63d86bd762869debafbc635ab3d7e8fae985e2d429d8ee437ad",
38
+ ".naome/task-contract.schema.json": "sha256:c806416d4944eaed6dc48b3760fd0dd5b9b5a7c9ab895697fe36b54c41c1332f",
39
+ "docs/naome/index.md": "sha256:75c4cdf9edcd46c83a619cbfc551e96cae35bcff694d955ebab4624125ae7f12",
40
+ "docs/naome/first-run.md": "sha256:a1dd0bd17ec9d71955a473cd2c4a615538e89a7d81e8f4e1015a50ab9efe3558",
41
+ "docs/naome/agent-workflow.md": "sha256:5e5b26e7896f95a9154abcd133f08b33f84fddc679757ed15c043a91e319fb4e",
42
+ "docs/naome/execution.md": "sha256:3d67fd9922a66a66f79f920adbb24dcd47eefdfde835a5351a27ffed932dcfea",
43
+ "docs/naome/upgrade.md": "sha256:2c60f0441bbd98bd528d109b30a7ded4b0ad55d61ffb9f52edac9e93b7999cb1"
44
+ }
45
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }