@shardworks/nexus 0.1.1

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 (45) hide show
  1. package/dist/cli.d.ts +2 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +3 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/dispatch.d.ts +5 -0
  6. package/dist/commands/dispatch.d.ts.map +1 -0
  7. package/dist/commands/dispatch.js +29 -0
  8. package/dist/commands/dispatch.js.map +1 -0
  9. package/dist/commands/init.d.ts +4 -0
  10. package/dist/commands/init.d.ts.map +1 -0
  11. package/dist/commands/init.js +74 -0
  12. package/dist/commands/init.js.map +1 -0
  13. package/dist/commands/install-tool.d.ts +6 -0
  14. package/dist/commands/install-tool.d.ts.map +1 -0
  15. package/dist/commands/install-tool.js +23 -0
  16. package/dist/commands/install-tool.js.map +1 -0
  17. package/dist/commands/instantiate.d.ts +6 -0
  18. package/dist/commands/instantiate.d.ts.map +1 -0
  19. package/dist/commands/instantiate.js +41 -0
  20. package/dist/commands/instantiate.js.map +1 -0
  21. package/dist/commands/manifest.d.ts +4 -0
  22. package/dist/commands/manifest.d.ts.map +1 -0
  23. package/dist/commands/manifest.js +28 -0
  24. package/dist/commands/manifest.js.map +1 -0
  25. package/dist/commands/publish.d.ts +4 -0
  26. package/dist/commands/publish.d.ts.map +1 -0
  27. package/dist/commands/publish.js +26 -0
  28. package/dist/commands/publish.js.map +1 -0
  29. package/dist/commands/remove-tool.d.ts +4 -0
  30. package/dist/commands/remove-tool.d.ts.map +1 -0
  31. package/dist/commands/remove-tool.js +24 -0
  32. package/dist/commands/remove-tool.js.map +1 -0
  33. package/dist/commands/status.d.ts +2 -0
  34. package/dist/commands/status.d.ts.map +1 -0
  35. package/dist/commands/status.js +9 -0
  36. package/dist/commands/status.js.map +1 -0
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +2 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/program.d.ts +2 -0
  42. package/dist/program.d.ts.map +1 -0
  43. package/dist/program.js +22 -0
  44. package/dist/program.js.map +1 -0
  45. package/package.json +53 -0
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,3 @@
1
+ import { program } from "./program.js";
2
+ program.parse();
3
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function makeDispatchCommand(): import("commander").Command<[string], {
2
+ workshop: string;
3
+ anima?: string | undefined;
4
+ }, {}>;
5
+ //# sourceMappingURL=dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"AAGA,wBAAgB,mBAAmB;;;OA0BlC"}
@@ -0,0 +1,29 @@
1
+ import { createCommand } from 'commander';
2
+ import { resolveNexusHome, dispatch } from '@shardworks/nexus-core';
3
+ export function makeDispatchCommand() {
4
+ return createCommand('dispatch')
5
+ .description('Post a commission to the guild')
6
+ .argument('<spec>', 'Commission specification — what needs to be done')
7
+ .requiredOption('--workshop <workshop>', 'Target workshop')
8
+ .option('--anima <anima>', 'Target anima name')
9
+ .action((spec, options) => {
10
+ const home = resolveNexusHome();
11
+ try {
12
+ const result = dispatch({
13
+ home,
14
+ spec,
15
+ workshop: options.workshop,
16
+ anima: options.anima,
17
+ });
18
+ console.log(`Commission #${result.commissionId} posted to workshop "${options.workshop}"`);
19
+ if (result.assigned) {
20
+ console.log(` Assigned to: ${result.assignedTo}`);
21
+ }
22
+ }
23
+ catch (err) {
24
+ console.error(`Error: ${err.message}`);
25
+ process.exitCode = 1;
26
+ }
27
+ });
28
+ }
29
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/commands/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEpE,MAAM,UAAU,mBAAmB;IACjC,OAAO,aAAa,CAAC,UAAU,CAAC;SAC7B,WAAW,CAAC,gCAAgC,CAAC;SAC7C,QAAQ,CAAC,QAAQ,EAAE,kDAAkD,CAAC;SACtE,cAAc,CAAC,uBAAuB,EAAE,iBAAiB,CAAC;SAC1D,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;SAC9C,MAAM,CAAC,CAAC,IAAY,EAAE,OAA6C,EAAE,EAAE;QACtE,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAEhC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC;gBACtB,IAAI;gBACJ,IAAI;gBACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,YAAY,wBAAwB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC3F,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function makeInitCommand(): import("commander").Command<[string | undefined], {
2
+ model: string;
3
+ }, {}>;
4
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAoCA,wBAAgB,eAAe;;OA0C9B"}
@@ -0,0 +1,74 @@
1
+ import { createCommand } from 'commander';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { createRequire } from 'node:module';
5
+ import readline from 'node:readline/promises';
6
+ import { initGuild, bootstrapBaseTools } from '@shardworks/nexus-core';
7
+ import { applyMigrations } from '@shardworks/engine-ledger-migrate';
8
+ const DEFAULT_MODEL = 'sonnet';
9
+ /** Resolve a package name to its root directory on disk. */
10
+ function makePackageResolver() {
11
+ const require = createRequire(import.meta.url);
12
+ return (packageName) => {
13
+ // Resolve the package's main entry, then walk up to find package.json
14
+ const entry = require.resolve(packageName);
15
+ let dir = path.dirname(entry);
16
+ while (dir !== path.dirname(dir)) {
17
+ if (fs.existsSync(path.join(dir, 'package.json')))
18
+ return dir;
19
+ dir = path.dirname(dir);
20
+ }
21
+ throw new Error(`Could not find package root for ${packageName}`);
22
+ };
23
+ }
24
+ async function prompt(question, defaultValue) {
25
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
26
+ try {
27
+ const suffix = defaultValue ? ` (${defaultValue})` : '';
28
+ const answer = await rl.question(`${question}${suffix}: `);
29
+ return answer.trim() || defaultValue || '';
30
+ }
31
+ finally {
32
+ rl.close();
33
+ }
34
+ }
35
+ export function makeInitCommand() {
36
+ return createCommand('init')
37
+ .description('Create a new guild — guildhall, directory structure, guild.json, and Ledger')
38
+ .argument('[path]', 'Path for the new guild (interactive prompt if omitted)')
39
+ .option('--model <model>', 'Default model for anima sessions', DEFAULT_MODEL)
40
+ .action(async (pathArg, options) => {
41
+ let guildPath;
42
+ if (pathArg) {
43
+ guildPath = pathArg;
44
+ }
45
+ else {
46
+ const name = await prompt('Guild name');
47
+ if (!name) {
48
+ console.error('Error: guild name is required.');
49
+ process.exitCode = 1;
50
+ return;
51
+ }
52
+ guildPath = name;
53
+ }
54
+ const model = options.model;
55
+ const home = path.resolve(guildPath);
56
+ try {
57
+ // 1. Create guild skeleton (bare repo, worktree, dirs, guild.json, migration file)
58
+ initGuild(home, model);
59
+ // 2. Install all framework tools via installTool
60
+ const resolvePackage = makePackageResolver();
61
+ bootstrapBaseTools(home, resolvePackage);
62
+ // 3. Create ledger via migration engine
63
+ applyMigrations(home);
64
+ }
65
+ catch (err) {
66
+ console.error(`Error: ${err.message}`);
67
+ process.exitCode = 1;
68
+ return;
69
+ }
70
+ console.log(`Guild created at ${home}`);
71
+ console.log(`\n export NEXUS_HOME=${home}\n`);
72
+ });
73
+ }
74
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function makeInstallToolCommand(): import("commander").Command<[string], {
2
+ name?: string | undefined;
3
+ slot?: string | undefined;
4
+ roles?: string | undefined;
5
+ }, {}>;
6
+ //# sourceMappingURL=install-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-tool.d.ts","sourceRoot":"","sources":["../../src/commands/install-tool.ts"],"names":[],"mappings":"AAGA,wBAAgB,sBAAsB;;;;OAqBrC"}
@@ -0,0 +1,23 @@
1
+ import { createCommand } from 'commander';
2
+ import { resolveNexusHome, installTool } from '@shardworks/nexus-core';
3
+ export function makeInstallToolCommand() {
4
+ return createCommand('install-tool')
5
+ .description('Install an implement, engine, curriculum, or temperament into the guild')
6
+ .argument('<source>', 'Local directory path containing a nexus descriptor')
7
+ .option('--name <name>', 'Override the tool name (defaults to directory name)')
8
+ .option('--slot <slot>', 'Override the version slot (defaults to version from descriptor)')
9
+ .option('--roles <roles>', 'Comma-separated roles for implement access gating')
10
+ .action((source, options) => {
11
+ const home = resolveNexusHome();
12
+ const roles = options.roles?.split(',').map(r => r.trim()).filter(Boolean);
13
+ const result = installTool({
14
+ home,
15
+ source,
16
+ name: options.name,
17
+ slot: options.slot,
18
+ roles,
19
+ });
20
+ console.log(`Installed ${result.category.slice(0, -1)} "${result.name}" at slot ${result.slot}`);
21
+ });
22
+ }
23
+ //# sourceMappingURL=install-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-tool.js","sourceRoot":"","sources":["../../src/commands/install-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEvE,MAAM,UAAU,sBAAsB;IACpC,OAAO,aAAa,CAAC,cAAc,CAAC;SACjC,WAAW,CAAC,yEAAyE,CAAC;SACtF,QAAQ,CAAC,UAAU,EAAE,oDAAoD,CAAC;SAC1E,MAAM,CAAC,eAAe,EAAE,qDAAqD,CAAC;SAC9E,MAAM,CAAC,eAAe,EAAE,iEAAiE,CAAC;SAC1F,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;SAC9E,MAAM,CAAC,CAAC,MAAc,EAAE,OAAyD,EAAE,EAAE;QACpF,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE3E,MAAM,MAAM,GAAG,WAAW,CAAC;YACzB,IAAI;YACJ,MAAM;YACN,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK;SACN,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function makeInstantiateCommand(): import("commander").Command<[string], {
2
+ roles: string;
3
+ curriculum?: string | undefined;
4
+ temperament?: string | undefined;
5
+ }, {}>;
6
+ //# sourceMappingURL=instantiate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instantiate.d.ts","sourceRoot":"","sources":["../../src/commands/instantiate.ts"],"names":[],"mappings":"AAGA,wBAAgB,sBAAsB;;;;OAuCrC"}
@@ -0,0 +1,41 @@
1
+ import { createCommand } from 'commander';
2
+ import { resolveNexusHome, instantiate } from '@shardworks/nexus-core';
3
+ export function makeInstantiateCommand() {
4
+ return createCommand('instantiate')
5
+ .description('Create a new anima in the guild')
6
+ .argument('<name>', 'Name for the new anima')
7
+ .requiredOption('--roles <roles>', 'Comma-separated roles (e.g. artificer,sage)')
8
+ .option('--curriculum <curriculum>', 'Curriculum to assign')
9
+ .option('--temperament <temperament>', 'Temperament to assign')
10
+ .action((name, options) => {
11
+ const home = resolveNexusHome();
12
+ const roles = options.roles.split(',').map(r => r.trim()).filter(Boolean);
13
+ if (roles.length === 0) {
14
+ console.error('Error: at least one role is required');
15
+ process.exitCode = 1;
16
+ return;
17
+ }
18
+ try {
19
+ const result = instantiate({
20
+ home,
21
+ name,
22
+ roles,
23
+ curriculum: options.curriculum,
24
+ temperament: options.temperament,
25
+ });
26
+ console.log(`Anima "${result.name}" instantiated (id: ${result.animaId})`);
27
+ console.log(` Roles: ${result.roles.join(', ')}`);
28
+ if (result.curriculum) {
29
+ console.log(` Curriculum: ${result.curriculum}`);
30
+ }
31
+ if (result.temperament) {
32
+ console.log(` Temperament: ${result.temperament}`);
33
+ }
34
+ }
35
+ catch (err) {
36
+ console.error(`Error: ${err.message}`);
37
+ process.exitCode = 1;
38
+ }
39
+ });
40
+ }
41
+ //# sourceMappingURL=instantiate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instantiate.js","sourceRoot":"","sources":["../../src/commands/instantiate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEvE,MAAM,UAAU,sBAAsB;IACpC,OAAO,aAAa,CAAC,aAAa,CAAC;SAChC,WAAW,CAAC,iCAAiC,CAAC;SAC9C,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC5C,cAAc,CAAC,iBAAiB,EAAE,6CAA6C,CAAC;SAChF,MAAM,CAAC,2BAA2B,EAAE,sBAAsB,CAAC;SAC3D,MAAM,CAAC,6BAA6B,EAAE,uBAAuB,CAAC;SAC9D,MAAM,CAAC,CAAC,IAAY,EAAE,OAAqE,EAAE,EAAE;QAC9F,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACtD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,WAAW,CAAC;gBACzB,IAAI;gBACJ,IAAI;gBACJ,KAAK;gBACL,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,IAAI,uBAAuB,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function makeManifestCommand(): import("commander").Command<[string], {
2
+ json?: true | undefined;
3
+ }, {}>;
4
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/commands/manifest.ts"],"names":[],"mappings":"AAIA,wBAAgB,mBAAmB;;OAuBlC"}
@@ -0,0 +1,28 @@
1
+ import { createCommand } from 'commander';
2
+ import { resolveNexusHome } from '@shardworks/nexus-core';
3
+ import { manifest } from '@shardworks/engine-manifest';
4
+ export function makeManifestCommand() {
5
+ return createCommand('manifest')
6
+ .description('Manifest an anima — resolve composition and show session config')
7
+ .argument('<anima>', 'Anima name to manifest')
8
+ .option('--json', 'Output full session config as JSON')
9
+ .action(async (animaName, options) => {
10
+ const home = resolveNexusHome();
11
+ try {
12
+ const result = await manifest(home, animaName);
13
+ if (options.json) {
14
+ console.log(JSON.stringify(result, null, 2));
15
+ }
16
+ else {
17
+ console.log(`Anima: ${result.anima.name} (${result.anima.roles.join(', ')})`);
18
+ console.log(`Implements: ${result.mcpConfig.implements.map(i => i.name).join(', ')}`);
19
+ console.log(`System prompt: ${result.systemPrompt.length} chars`);
20
+ }
21
+ }
22
+ catch (err) {
23
+ console.error(`Error: ${err.message}`);
24
+ process.exitCode = 1;
25
+ }
26
+ });
27
+ }
28
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/commands/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,MAAM,UAAU,mBAAmB;IACjC,OAAO,aAAa,CAAC,UAAU,CAAC;SAC7B,WAAW,CAAC,iEAAiE,CAAC;SAC9E,QAAQ,CAAC,SAAS,EAAE,wBAAwB,CAAC;SAC7C,MAAM,CAAC,QAAQ,EAAE,oCAAoC,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAA2B,EAAE,EAAE;QAC/D,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAEhC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAE/C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9E,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtF,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,YAAY,CAAC,MAAM,QAAQ,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function makePublishCommand(): import("commander").Command<[string], {
2
+ summary?: string | undefined;
3
+ }, {}>;
4
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB;;OAuBjC"}
@@ -0,0 +1,26 @@
1
+ import { createCommand } from 'commander';
2
+ import { resolveNexusHome, publish } from '@shardworks/nexus-core';
3
+ export function makePublishCommand() {
4
+ return createCommand('publish')
5
+ .description('Publish a completed commission')
6
+ .argument('<commissionId>', 'Commission ID to publish')
7
+ .option('--summary <summary>', 'Brief summary of what was accomplished')
8
+ .action((commissionIdStr, options) => {
9
+ const home = resolveNexusHome();
10
+ const commissionId = parseInt(commissionIdStr, 10);
11
+ if (isNaN(commissionId)) {
12
+ console.error('Error: commission ID must be a number');
13
+ process.exitCode = 1;
14
+ return;
15
+ }
16
+ try {
17
+ const result = publish({ home, commissionId, summary: options.summary });
18
+ console.log(`Commission #${result.commissionId} published (was: ${result.previousStatus})`);
19
+ }
20
+ catch (err) {
21
+ console.error(`Error: ${err.message}`);
22
+ process.exitCode = 1;
23
+ }
24
+ });
25
+ }
26
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,UAAU,kBAAkB;IAChC,OAAO,aAAa,CAAC,SAAS,CAAC;SAC5B,WAAW,CAAC,gCAAgC,CAAC;SAC7C,QAAQ,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;SACtD,MAAM,CAAC,qBAAqB,EAAE,wCAAwC,CAAC;SACvE,MAAM,CAAC,CAAC,eAAuB,EAAE,OAA6B,EAAE,EAAE;QACjE,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAEnD,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACvD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,YAAY,oBAAoB,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC;QAC9F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function makeRemoveToolCommand(): import("commander").Command<[string], {
2
+ type?: string | undefined;
3
+ }, {}>;
4
+ //# sourceMappingURL=remove-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-tool.d.ts","sourceRoot":"","sources":["../../src/commands/remove-tool.ts"],"names":[],"mappings":"AAGA,wBAAgB,qBAAqB;;OAsBpC"}
@@ -0,0 +1,24 @@
1
+ import { createCommand } from 'commander';
2
+ import { resolveNexusHome, removeTool } from '@shardworks/nexus-core';
3
+ export function makeRemoveToolCommand() {
4
+ return createCommand('remove-tool')
5
+ .description('Remove an implement, engine, curriculum, or temperament from the guild')
6
+ .argument('<name>', 'Name of the tool to remove')
7
+ .option('--type <type>', 'Restrict to a specific category (implements, engines, curricula, temperaments)')
8
+ .action((name, options) => {
9
+ const home = resolveNexusHome();
10
+ const validTypes = ['implements', 'engines', 'curricula', 'temperaments'];
11
+ let category;
12
+ if (options.type) {
13
+ if (!validTypes.includes(options.type)) {
14
+ console.error(`Error: --type must be one of: ${validTypes.join(', ')}`);
15
+ process.exitCode = 1;
16
+ return;
17
+ }
18
+ category = options.type;
19
+ }
20
+ const result = removeTool({ home, name, category });
21
+ console.log(`Removed ${result.category.slice(0, -1)} "${result.name}" (was at slot ${result.slot})`);
22
+ });
23
+ }
24
+ //# sourceMappingURL=remove-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-tool.js","sourceRoot":"","sources":["../../src/commands/remove-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,UAAU,qBAAqB;IACnC,OAAO,aAAa,CAAC,aAAa,CAAC;SAChC,WAAW,CAAC,wEAAwE,CAAC;SACrF,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;SAChD,MAAM,CAAC,eAAe,EAAE,gFAAgF,CAAC;SACzG,MAAM,CAAC,CAAC,IAAY,EAAE,OAA0B,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,CAAU,CAAC;QACnF,IAAI,QAA+C,CAAC;QAEpD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAiC,CAAC,EAAE,CAAC;gBACpE,OAAO,CAAC,KAAK,CAAC,iCAAiC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,QAAQ,GAAG,OAAO,CAAC,IAAiC,CAAC;QACvD,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,kBAAkB,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function makeStatusCommand(): import("commander").Command<[], {}, {}>;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAEA,wBAAgB,iBAAiB,4CAMhC"}
@@ -0,0 +1,9 @@
1
+ import { createCommand } from 'commander';
2
+ export function makeStatusCommand() {
3
+ return createCommand('status')
4
+ .description('Show system status')
5
+ .action(() => {
6
+ console.log('Nexus Mk 2.1 — operational');
7
+ });
8
+ }
9
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,UAAU,iBAAiB;IAC/B,OAAO,aAAa,CAAC,QAAQ,CAAC;SAC3B,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { VERSION } from '@shardworks/nexus-core';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { VERSION } from '@shardworks/nexus-core';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const program: import("commander").Command<[], {}, {}>;
2
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,OAAO,yCAED,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { createCommand } from 'commander';
2
+ import { VERSION } from '@shardworks/nexus-core';
3
+ import { makeInitCommand } from "./commands/init.js";
4
+ import { makeInstallToolCommand } from "./commands/install-tool.js";
5
+ import { makeRemoveToolCommand } from "./commands/remove-tool.js";
6
+ import { makeDispatchCommand } from "./commands/dispatch.js";
7
+ import { makePublishCommand } from "./commands/publish.js";
8
+ import { makeInstantiateCommand } from "./commands/instantiate.js";
9
+ import { makeManifestCommand } from "./commands/manifest.js";
10
+ import { makeStatusCommand } from "./commands/status.js";
11
+ export const program = createCommand('nexus')
12
+ .description('Nexus Mk 2.1 — experimental multi-agent AI system')
13
+ .version(VERSION);
14
+ program.addCommand(makeInitCommand());
15
+ program.addCommand(makeInstallToolCommand());
16
+ program.addCommand(makeRemoveToolCommand());
17
+ program.addCommand(makeDispatchCommand());
18
+ program.addCommand(makePublishCommand());
19
+ program.addCommand(makeInstantiateCommand());
20
+ program.addCommand(makeManifestCommand());
21
+ program.addCommand(makeStatusCommand());
22
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;KAC1C,WAAW,CAAC,mDAAmD,CAAC;KAChE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;AACtC,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAC7C,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAC7C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@shardworks/nexus",
3
+ "version": "0.1.1",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/shardworks/nexus-mk2",
7
+ "directory": "packages/cli"
8
+ },
9
+ "description": "Nexus Mk 2.1 — CLI for the guild system",
10
+ "type": "module",
11
+ "bin": {
12
+ "nexus": "./dist/cli.js"
13
+ },
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js"
18
+ },
19
+ "./commands/*": {
20
+ "types": "./dist/commands/*.d.ts",
21
+ "import": "./dist/commands/*.js"
22
+ }
23
+ },
24
+ "dependencies": {
25
+ "better-sqlite3": "12.8.0",
26
+ "commander": "14.0.3",
27
+ "@shardworks/engine-ledger-migrate": "0.1.1",
28
+ "@shardworks/engine-manifest": "0.1.1",
29
+ "@shardworks/implement-dispatch": "0.1.1",
30
+ "@shardworks/nexus-core": "0.1.1",
31
+ "@shardworks/implement-install-tool": "0.1.1",
32
+ "@shardworks/implement-instantiate": "0.1.1",
33
+ "@shardworks/implement-nexus-version": "0.1.1",
34
+ "@shardworks/implement-remove-tool": "0.1.1",
35
+ "@shardworks/implement-publish": "0.1.1",
36
+ "@shardworks/engine-mcp-server": "0.1.1",
37
+ "@shardworks/engine-worktree-setup": "0.1.1"
38
+ },
39
+ "devDependencies": {
40
+ "@commander-js/extra-typings": "14.0.0",
41
+ "@types/better-sqlite3": "7.6.13",
42
+ "@types/node": "25.5.0"
43
+ },
44
+ "files": [
45
+ "dist"
46
+ ],
47
+ "scripts": {
48
+ "build": "tsc",
49
+ "cli": "node --disable-warning=ExperimentalWarning --experimental-transform-types src/cli.ts",
50
+ "test": "node --disable-warning=ExperimentalWarning --experimental-transform-types --test 'src/**/*.test.ts'",
51
+ "typecheck": "tsc --noEmit"
52
+ }
53
+ }