@bvdm/delano 0.1.1 → 0.1.3
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
|
@@ -46,6 +46,42 @@ delano --yes
|
|
|
46
46
|
delano --target /path/to/repo --yes
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
## Global CLI install
|
|
50
|
+
|
|
51
|
+
If you want `delano` available in every repository you work in, install it globally:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npm install -g @bvdm/delano
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Typical flow in a repository:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
cd /path/to/repo
|
|
61
|
+
delano install --yes
|
|
62
|
+
delano validate
|
|
63
|
+
delano init <slug> "<Project Name>" [owner] [lead]
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Command intent:
|
|
67
|
+
|
|
68
|
+
- `delano install` bootstraps the Delano runtime into the current repository
|
|
69
|
+
- `delano validate` checks whether the runtime and required assets are in place
|
|
70
|
+
- `delano init` creates a delivery project inside a repository that already has Delano installed
|
|
71
|
+
|
|
72
|
+
`delano init` usage:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
delano init <slug> "<Project Name>" [owner] [lead]
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Notes:
|
|
79
|
+
|
|
80
|
+
- use kebab-case for `<slug>`
|
|
81
|
+
- `owner` defaults to `team`
|
|
82
|
+
- `lead` defaults to `owner`
|
|
83
|
+
- this is the right command for an agent to scaffold a new delivery project after `delano install`
|
|
84
|
+
|
|
49
85
|
## How to use Delano after install
|
|
50
86
|
|
|
51
87
|
If you bootstrap with one-shot `npx`, keep using `npx` for wrapper commands:
|
|
@@ -62,7 +98,7 @@ If the package is installed locally or globally, run these inside the target rep
|
|
|
62
98
|
delano validate
|
|
63
99
|
delano status
|
|
64
100
|
delano next -- --all
|
|
65
|
-
delano init <slug> "<Project Name>"
|
|
101
|
+
delano init <slug> "<Project Name>" [owner] [lead]
|
|
66
102
|
```
|
|
67
103
|
|
|
68
104
|
The wrapper commands call the existing PM scripts under `.agents/scripts/pm/`. You can also run those scripts directly:
|
|
@@ -93,9 +129,31 @@ The CLI does not bundle its own shell or Python runtime.
|
|
|
93
129
|
- it reports each conflict as file, directory, or symlink
|
|
94
130
|
- it only overwrites approved allowlist paths when `--force` is used
|
|
95
131
|
- it does not touch unrelated files outside the allowlist
|
|
132
|
+
- it does not install or overwrite repo-root Git config files such as `.gitignore` or `.gitattributes`
|
|
96
133
|
|
|
97
134
|
The base install payload intentionally excludes top-level adapter entry docs such as `AGENTS.md`, `CLAUDE.md`, `CODEX.md`, `OPENCODE.md`, and `PI.md`. Those remain opt-in only.
|
|
98
135
|
|
|
136
|
+
## Optional AGENTS.md / CLAUDE.md snippet
|
|
137
|
+
|
|
138
|
+
If you want explicit Delano instructions in a repo-root `AGENTS.md` or `CLAUDE.md`, copy and paste this yourself:
|
|
139
|
+
|
|
140
|
+
```md
|
|
141
|
+
## Delano
|
|
142
|
+
|
|
143
|
+
This repository uses Delano.
|
|
144
|
+
|
|
145
|
+
Canonical process and contracts live in `HANDBOOK.md`.
|
|
146
|
+
Delivery state lives in `.project/`.
|
|
147
|
+
Shared runtime lives in `.agents/`.
|
|
148
|
+
`.claude/` is a compatibility mirror of `.agents/`, not a second runtime.
|
|
149
|
+
|
|
150
|
+
When working in this repository:
|
|
151
|
+
- treat `.project/` as the source of truth
|
|
152
|
+
- use the Delano status model and evidence discipline from `HANDBOOK.md`
|
|
153
|
+
- keep sync and quality gates aligned with the handbook
|
|
154
|
+
- use `delano init <slug> "<Project Name>" [owner] [lead]` to scaffold a new delivery project when needed
|
|
155
|
+
```
|
|
156
|
+
|
|
99
157
|
## v1.1 boundaries
|
|
100
158
|
|
|
101
159
|
This package is deliberately narrow:
|
|
@@ -75,8 +75,6 @@
|
|
|
75
75
|
".agents/skills/sync-skill/templates/conflict-resolution-actions.md",
|
|
76
76
|
".agents/skills/sync-skill/templates/drift-report.md",
|
|
77
77
|
".delano/README.md",
|
|
78
|
-
".gitattributes",
|
|
79
|
-
".gitignore",
|
|
80
78
|
".project/context/gui-testing.md",
|
|
81
79
|
".project/context/product-context.md",
|
|
82
80
|
".project/context/progress.md",
|
package/package.json
CHANGED
package/src/cli/lib/install.js
CHANGED
|
@@ -11,7 +11,6 @@ const path = require("node:path");
|
|
|
11
11
|
const readline = require("node:readline/promises");
|
|
12
12
|
const { stdin, stdout } = require("node:process");
|
|
13
13
|
|
|
14
|
-
const { getPackagedAssetRelativePath } = require("./asset-paths");
|
|
15
14
|
const { CliError } = require("./errors");
|
|
16
15
|
const { getPackageRoot, getPathType } = require("./runtime");
|
|
17
16
|
|
|
@@ -123,7 +122,7 @@ function parseInstallArgs(args) {
|
|
|
123
122
|
function buildInstallPlan(options) {
|
|
124
123
|
const { manifest, payloadRoot } = readInstallManifest();
|
|
125
124
|
const items = manifest.paths.map((relativePath) => {
|
|
126
|
-
const sourcePath = path.join(payloadRoot,
|
|
125
|
+
const sourcePath = path.join(payloadRoot, relativePath);
|
|
127
126
|
if (!existsSync(sourcePath)) {
|
|
128
127
|
throw new CliError(getMissingPackagedAssetMessage(relativePath), 1);
|
|
129
128
|
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
*.sh text eol=lf
|
|
2
|
-
*.bash text eol=lf
|
|
3
|
-
*.zsh text eol=lf
|
|
4
|
-
|
|
5
|
-
*.md text eol=lf
|
|
6
|
-
*.yml text eol=lf
|
|
7
|
-
*.yaml text eol=lf
|
|
8
|
-
*.json text eol=lf
|
|
9
|
-
*.jsonc text eol=lf
|
|
10
|
-
*.ts text eol=lf
|
|
11
|
-
*.tsx text eol=lf
|
|
12
|
-
*.js text eol=lf
|
|
13
|
-
*.mjs text eol=lf
|
|
14
|
-
*.py text eol=lf
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Runtime local artifacts
|
|
2
|
-
.claude/logs/*.jsonl
|
|
3
|
-
.claude/logs/tests/
|
|
4
|
-
.agents/logs/*.jsonl
|
|
5
|
-
.agents/logs/tests/
|
|
6
|
-
|
|
7
|
-
# Keep structural markers and docs
|
|
8
|
-
!.claude/logs/.gitkeep
|
|
9
|
-
!.claude/logs/schema.md
|
|
10
|
-
!.agents/logs/.gitkeep
|
|
11
|
-
!.agents/logs/schema.md
|
|
12
|
-
|
|
13
|
-
# Local Claude overrides
|
|
14
|
-
.claude/settings.local.json
|
|
15
|
-
.agents/settings.local.json
|
|
16
|
-
|
|
17
|
-
# Node/npm local artifacts
|
|
18
|
-
node_modules/
|
|
19
|
-
assets/payload/
|
|
20
|
-
*.tgz
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
const path = require("node:path");
|
|
2
|
-
|
|
3
|
-
const PACKAGED_BASENAME_MAP = new Map([
|
|
4
|
-
[".gitignore", "__dot_gitignore__"]
|
|
5
|
-
]);
|
|
6
|
-
|
|
7
|
-
function getPackagedAssetRelativePath(relativePath) {
|
|
8
|
-
const normalizedPath = relativePath.split(/[\\/]/).join("/");
|
|
9
|
-
const parsedPath = path.posix.parse(normalizedPath);
|
|
10
|
-
const packagedBasename = PACKAGED_BASENAME_MAP.get(parsedPath.base);
|
|
11
|
-
|
|
12
|
-
if (!packagedBasename) {
|
|
13
|
-
return normalizedPath;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return parsedPath.dir ? `${parsedPath.dir}/${packagedBasename}` : packagedBasename;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
module.exports = {
|
|
20
|
-
getPackagedAssetRelativePath
|
|
21
|
-
};
|