dlw-machine-setup 0.8.0 → 0.8.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 (2) hide show
  1. package/bin/installer.js +42 -8
  2. package/package.json +1 -1
package/bin/installer.js CHANGED
@@ -3888,7 +3888,9 @@ var claudeCodeProfile = {
3888
3888
  handlers: {
3889
3889
  agent: {
3890
3890
  supported: true,
3891
- destination: (name) => `.claude/agents/${name}.md`
3891
+ // File agents land at `.claude/agents/<name>.md`; folder agents
3892
+ // (persona bundles like jay/, monty/) land at `.claude/agents/<name>/`.
3893
+ destination: (name, isDir) => `.claude/agents/${name}${isDir ? "" : ".md"}`
3892
3894
  },
3893
3895
  skill: {
3894
3896
  supported: true,
@@ -3903,6 +3905,13 @@ var claudeCodeProfile = {
3903
3905
  },
3904
3906
  "instructions-snippet": {
3905
3907
  supported: true
3908
+ },
3909
+ workspace: {
3910
+ supported: true,
3911
+ // Bundle workspace payload (workflow scripts, shared definitions,
3912
+ // README) lands under `.claude/factory/`. Matches the path pattern
3913
+ // used historically by Factory's v1 ops and gitignored entries.
3914
+ destination: (name) => `.claude/factory/${name}`
3906
3915
  }
3907
3916
  }
3908
3917
  };
@@ -3914,19 +3923,37 @@ var githubCopilotProfile = {
3914
3923
  handlers: {
3915
3924
  agent: {
3916
3925
  supported: true,
3917
- destination: (name) => `.github/agents/${name}.agent.md`
3926
+ // Copilot only registers agents that match `.agent.md` literally.
3927
+ // File agents → `.github/agents/<name>.agent.md` (registered).
3928
+ // Folder agents (persona bundles like jay/, monty/, shared/) →
3929
+ // `.github/agents/<name>/` (placed alongside, but Copilot ignores
3930
+ // them because they don't match `.agent.md`). That's intentional:
3931
+ // these are Claude-specific personas, but shipping the files
3932
+ // means a user who switches agents later still has them on disk.
3933
+ destination: (name, isDir) => `.github/agents/${name}${isDir ? "" : ".agent.md"}`
3918
3934
  },
3919
3935
  skill: {
3920
3936
  supported: true,
3921
3937
  destination: (name) => `.github/skills/${name}/SKILL.md`
3922
3938
  },
3923
3939
  hook: {
3924
- // See header docblock for the three HookHandler extensions needed
3925
- // to flip this on. Until then, hook assets are skipped on Copilot.
3940
+ // Hooks are Claude-only by policy (see plan doc). The bundle's
3941
+ // hook-related ops are gated with `when: 'hooks-supported'`, so
3942
+ // Copilot installs ship no hook events, no hook scripts, and no
3943
+ // statusLine setting. Phase 4 (Copilot hook implementation) was
3944
+ // canceled — this is the permanent final state.
3926
3945
  supported: false
3927
3946
  },
3928
3947
  "instructions-snippet": {
3929
3948
  supported: true
3949
+ },
3950
+ workspace: {
3951
+ supported: true,
3952
+ // Bundle workspace payload (workflow scripts, shared definitions,
3953
+ // README) lands under `.github/factory/`. Keeps Factory's
3954
+ // supporting material under the namespaced .github/ tree where
3955
+ // Copilot already reads everything else from.
3956
+ destination: (name) => `.github/factory/${name}`
3930
3957
  }
3931
3958
  }
3932
3959
  };
@@ -3939,7 +3966,8 @@ var cursorProfile = {
3939
3966
  agent: { supported: false },
3940
3967
  skill: { supported: false },
3941
3968
  hook: { supported: false },
3942
- "instructions-snippet": { supported: true }
3969
+ "instructions-snippet": { supported: true },
3970
+ workspace: { supported: false }
3943
3971
  }
3944
3972
  };
3945
3973
 
@@ -4008,6 +4036,7 @@ function runBundleV2(manifest, ctx) {
4008
4036
  runMergeJson({ op: "merge-json", file, patch }, manifest.name, ctx, result);
4009
4037
  }
4010
4038
  for (const op of manifest.ops ?? []) {
4039
+ if (op.when === "hooks-supported" && !profile.handlers.hook.supported) continue;
4011
4040
  executeOp(op, manifest.name, ctx, result);
4012
4041
  result.opsExecuted++;
4013
4042
  }
@@ -4035,20 +4064,25 @@ function runAsset(asset, profile, hookPatches, ctx, result) {
4035
4064
  result.instructionsSnippet = asset.content;
4036
4065
  }
4037
4066
  return;
4067
+ case "workspace":
4068
+ runAssetCopy(asset, profile.handlers.workspace, ctx, result);
4069
+ return;
4038
4070
  }
4039
4071
  }
4040
4072
  function runAssetCopy(asset, handler, ctx, result) {
4041
4073
  if (!handler.supported || !handler.destination) return;
4042
4074
  const source = resolveBundlePath(asset.source, ctx);
4043
4075
  if (!(0, import_fs6.existsSync)(source)) return;
4044
- const target = resolveProjectPath(handler.destination(asset.name), ctx);
4045
- if ((0, import_fs6.statSync)(source).isDirectory()) {
4076
+ const isDirectory = (0, import_fs6.statSync)(source).isDirectory();
4077
+ const targetRel = handler.destination(asset.name, isDirectory);
4078
+ const target = resolveProjectPath(targetRel, ctx);
4079
+ if (isDirectory) {
4046
4080
  copyDirectory(source, target);
4047
4081
  } else {
4048
4082
  (0, import_fs6.mkdirSync)((0, import_path6.dirname)(target), { recursive: true });
4049
4083
  (0, import_fs6.copyFileSync)(source, target);
4050
4084
  }
4051
- result.filesTouched.push(handler.destination(asset.name));
4085
+ result.filesTouched.push(targetRel);
4052
4086
  }
4053
4087
  function accumulateHook(asset, handler, hookPatches, ctx, result) {
4054
4088
  if (!handler.supported) return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dlw-machine-setup",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "One-shot installer for The Machine toolchain",
5
5
  "bin": {
6
6
  "dlw-machine-setup": "bin/installer.js"