duaer-spec 0.6.1 → 0.6.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/ADOPT.md +17 -48
- package/CHANGELOG.md +14 -28
- package/README.md +8 -11
- package/bin/duaer.mjs +45 -24
- package/docs/agent/e2e-test-plan.md +2 -2
- package/package.json +2 -2
package/ADOPT.md
CHANGED
|
@@ -1,70 +1,39 @@
|
|
|
1
1
|
# Adopt duaer-spec
|
|
2
2
|
|
|
3
|
-
Install
|
|
4
|
-
Brief → work → accept **without** the human operating slash commands or CLI.
|
|
5
|
-
|
|
6
|
-
## Install (human, once)
|
|
3
|
+
## Install
|
|
7
4
|
|
|
8
5
|
```bash
|
|
9
6
|
npx duaer-spec init --here
|
|
10
|
-
# pin: npx github:fujiezee/duaer-spec@v0.6.1 duaer init --here
|
|
11
7
|
```
|
|
12
8
|
|
|
9
|
+
## Update
|
|
10
|
+
|
|
13
11
|
```bash
|
|
14
|
-
npx duaer-spec
|
|
15
|
-
npx duaer-spec init --here --ops
|
|
12
|
+
npx duaer-spec update
|
|
16
13
|
```
|
|
17
14
|
|
|
15
|
+
That’s it. If you customized local files, glance at `git diff` once.
|
|
16
|
+
|
|
18
17
|
Ensure the repo has **`main`** and **`develop`**. See
|
|
19
18
|
[`docs/agent/branching-and-release.md`](docs/agent/branching-and-release.md).
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
## Updating an existing install
|
|
24
|
-
|
|
25
|
-
Already ran `duaer init` before? Refresh managed files:
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
npx duaer-spec@latest init --here --force
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Then:
|
|
32
|
-
|
|
33
|
-
1. **Review the git diff** — keep your project-specific edits to
|
|
34
|
-
`.duaer/memory/constitution.md`, `project-context.md`, `docs/baseline.md`,
|
|
35
|
-
and especially **`.duaer/handoff.json` `commands`** (your restart scripts).
|
|
36
|
-
2. Restore any local overrides you still need.
|
|
37
|
-
3. Confirm `.gitignore` still contains `.worktree/`.
|
|
38
|
-
4. No need to re-learn slash commands — talk to the agent as before.
|
|
20
|
+
Then talk to the agent in plain language.
|
|
39
21
|
|
|
40
|
-
|
|
22
|
+
## Options
|
|
41
23
|
|
|
42
24
|
```bash
|
|
43
|
-
npx duaer-spec
|
|
44
|
-
|
|
45
|
-
npx
|
|
25
|
+
npx duaer-spec init --here --method
|
|
26
|
+
npx duaer-spec init --here --ops
|
|
27
|
+
npx duaer-spec update --method # rare; usually omit
|
|
46
28
|
```
|
|
47
29
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
## What gets installed
|
|
51
|
-
|
|
52
|
-
- Always-on autonomous job loop
|
|
53
|
-
- `.duaer/handoff.json` — restart services on **develop** after worktree remove
|
|
54
|
-
- Agent ops: `AGENTS.md`, branching/release docs, mandatory `.worktree/`
|
|
55
|
-
|
|
56
|
-
## Branch model (mandatory)
|
|
57
|
-
|
|
58
|
-
| Branch | Role |
|
|
59
|
-
|---|---|
|
|
60
|
-
| `main` | Production / online |
|
|
61
|
-
| `develop` | Day-to-day integration |
|
|
62
|
-
| `feat/<name>` | Features → `develop` |
|
|
63
|
-
| `fix/<name>` | Fixes → `develop` (hotfix via `main`) |
|
|
30
|
+
## What you get
|
|
64
31
|
|
|
65
|
-
|
|
32
|
+
- Autonomous job loop (ask → Brief → work → accept)
|
|
33
|
+
- `.duaer/handoff.json` + `duaer handoff` after worktree remove
|
|
34
|
+
- Agent ops: `main` / `develop` / `feat` / `fix` + `.worktree/`
|
|
66
35
|
|
|
67
36
|
## Precedence
|
|
68
37
|
|
|
69
|
-
1. `AGENTS.md`
|
|
70
|
-
2. `DUADER.md` / `.duaer/`
|
|
38
|
+
1. `AGENTS.md`
|
|
39
|
+
2. `DUADER.md` / `.duaer/`
|
package/CHANGELOG.md
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.6.2 — 2026-09-15
|
|
4
|
+
|
|
5
|
+
### Simple update
|
|
6
|
+
|
|
7
|
+
- `npx duaer-spec update` refreshes an existing install (no `--force` flags to remember)
|
|
8
|
+
- Remembers prior init mode from `.duaer/duaer-init.json`
|
|
9
|
+
- README / ADOPT: install + update are each one line
|
|
10
|
+
|
|
3
11
|
## 0.6.1 — 2026-09-15
|
|
4
12
|
|
|
5
13
|
### Worktree → develop service handoff
|
|
6
14
|
|
|
7
|
-
-
|
|
8
|
-
|
|
9
|
-
- `.duaer/handoff.json` configures restart commands (e.g. `npm run dev`)
|
|
10
|
-
- CLI: `duaer handoff` / `duaer handoff --run`
|
|
11
|
-
- Docs: update path for existing installs (`init --force` + review diff)
|
|
15
|
+
- `.duaer/handoff.json` + `duaer handoff [--run]`
|
|
16
|
+
- Mandatory restart on develop after worktree remove
|
|
12
17
|
|
|
13
18
|
## 0.6.0 — 2026-09-15
|
|
14
19
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
- Required: `main` / `develop` / `feat/*` / `fix/*`
|
|
18
|
-
- [`docs/agent/branching-and-release.md`](docs/agent/branching-and-release.md)
|
|
20
|
+
- Mandatory `main` / `develop` / `feat/*` / `fix/*` + release flows
|
|
19
21
|
|
|
20
22
|
## 0.5.1 — 2026-09-15
|
|
21
23
|
|
|
@@ -23,24 +25,8 @@
|
|
|
23
25
|
|
|
24
26
|
## 0.5.0 — 2026-09-15
|
|
25
27
|
|
|
26
|
-
- Autonomous digital employee
|
|
27
|
-
|
|
28
|
-
## 0.4.0 — 2026-09-15
|
|
29
|
-
|
|
30
|
-
- Everyday `/duaer-do` path (later agent-internal)
|
|
31
|
-
|
|
32
|
-
## 0.3.0 — 2026-09-15
|
|
33
|
-
|
|
34
|
-
- Job handoff policy
|
|
35
|
-
|
|
36
|
-
## 0.2.0 — 2026-09-15
|
|
37
|
-
|
|
38
|
-
- `delivery.json`
|
|
39
|
-
|
|
40
|
-
## 0.1.1 — 2026-09-15
|
|
41
|
-
|
|
42
|
-
- Digital-employee positioning
|
|
28
|
+
- Autonomous digital employee
|
|
43
29
|
|
|
44
|
-
## 0.
|
|
30
|
+
## 0.4.0 — 0.1.0
|
|
45
31
|
|
|
46
|
-
|
|
32
|
+
See git history for earlier notes.
|
package/README.md
CHANGED
|
@@ -13,8 +13,13 @@ talk; the employee runs the process.
|
|
|
13
13
|
npx duaer-spec init --here
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
## Update
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx duaer-spec update
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Then use Cursor as usual — describe what you want.
|
|
18
23
|
|
|
19
24
|
## What the employee does (by itself)
|
|
20
25
|
|
|
@@ -41,18 +46,10 @@ Go-live and flows by issue type:
|
|
|
41
46
|
**After merge:** `duaer handoff [--run]` restarts local services on `develop`
|
|
42
47
|
(configure commands in `.duaer/handoff.json`).
|
|
43
48
|
|
|
44
|
-
## Updating
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
npx duaer-spec@latest init --here --force # review diff; keep handoff commands
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Details: [`ADOPT.md`](ADOPT.md)#updating-an-existing-install
|
|
51
|
-
|
|
52
49
|
## Optional
|
|
53
50
|
|
|
54
51
|
```bash
|
|
55
|
-
npx duaer-spec
|
|
52
|
+
npx duaer-spec init --here --method
|
|
56
53
|
```
|
|
57
54
|
|
|
58
55
|
Details: [`ADOPT.md`](ADOPT.md) · Method: [`DUADER.md`](DUADER.md) · Ops: [`AGENTS.md`](AGENTS.md)
|
package/bin/duaer.mjs
CHANGED
|
@@ -27,25 +27,16 @@ const POLICY_MODES = new Set(['off', 'coach', 'strict'])
|
|
|
27
27
|
|
|
28
28
|
const USAGE = `duaer — digital-employee delivery (duaer-spec ${PKG.version})
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
Install: npx duaer-spec init --here
|
|
31
|
+
Update: npx duaer-spec update
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Then talk to the agent in plain language.
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
duaer handoff [
|
|
37
|
-
duaer status
|
|
38
|
-
duaer check | policy | version
|
|
35
|
+
Also:
|
|
36
|
+
duaer handoff [--run] Restart services on develop after worktree remove
|
|
37
|
+
duaer status | check | policy | version | help
|
|
39
38
|
|
|
40
|
-
Init: --all
|
|
41
|
-
|
|
42
|
-
Update existing install:
|
|
43
|
-
npx duaer-spec@latest init --here --force
|
|
44
|
-
# then review git diff; keep project-specific constitution / baseline / handoff commands
|
|
45
|
-
|
|
46
|
-
Example:
|
|
47
|
-
npx duaer-spec init --here
|
|
48
|
-
duaer handoff --run
|
|
39
|
+
Init options: --all | --method | --ops | --force | --branch <n> | --here
|
|
49
40
|
`
|
|
50
41
|
|
|
51
42
|
function parseArgs(argv) {
|
|
@@ -63,14 +54,21 @@ function parseArgs(argv) {
|
|
|
63
54
|
strict: false,
|
|
64
55
|
policyMode: null,
|
|
65
56
|
run: false,
|
|
57
|
+
modeExplicit: false,
|
|
66
58
|
}
|
|
67
59
|
const rest = args.slice(1)
|
|
68
60
|
for (let i = 0; i < rest.length; i++) {
|
|
69
61
|
const a = rest[i]
|
|
70
|
-
if (a === '--all')
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
else if (a === '--
|
|
62
|
+
if (a === '--all') {
|
|
63
|
+
out.mode = 'all'
|
|
64
|
+
out.modeExplicit = true
|
|
65
|
+
} else if (a === '--method') {
|
|
66
|
+
out.mode = 'method'
|
|
67
|
+
out.modeExplicit = true
|
|
68
|
+
} else if (a === '--ops') {
|
|
69
|
+
out.mode = 'ops'
|
|
70
|
+
out.modeExplicit = true
|
|
71
|
+
} else if (a === '--force') out.force = true
|
|
74
72
|
else if (a === '--here') out.dir = '.'
|
|
75
73
|
else if (a === '--workplace') out.workplace = true
|
|
76
74
|
else if (a === '--delivery') out.delivery = true
|
|
@@ -338,11 +336,31 @@ function cmdInit(opts) {
|
|
|
338
336
|
console.log(`
|
|
339
337
|
Hired.
|
|
340
338
|
|
|
341
|
-
|
|
342
|
-
|
|
339
|
+
Talk to the agent in plain language.
|
|
340
|
+
Later update: npx duaer-spec update
|
|
341
|
+
`)
|
|
342
|
+
}
|
|
343
343
|
|
|
344
|
-
|
|
345
|
-
|
|
344
|
+
function cmdUpdate(opts) {
|
|
345
|
+
const target = resolve(opts.dir)
|
|
346
|
+
const marker = readJson(join(target, '.duaer', 'duaer-init.json'), null)
|
|
347
|
+
if (!marker && !existsSync(join(target, '.duaer')) && !existsSync(join(target, 'DUADER.md'))) {
|
|
348
|
+
console.log('No duaer install found here. Use: npx duaer-spec init --here')
|
|
349
|
+
process.exitCode = 1
|
|
350
|
+
return
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
if (!opts.modeExplicit && marker?.mode && ['all', 'method', 'ops'].includes(marker.mode)) {
|
|
354
|
+
opts.mode = marker.mode
|
|
355
|
+
}
|
|
356
|
+
if (marker?.branch) opts.branch = marker.branch
|
|
357
|
+
opts.force = true
|
|
358
|
+
|
|
359
|
+
console.log(`Updating → ${PKG.version}`)
|
|
360
|
+
cmdInit(opts)
|
|
361
|
+
console.log(`
|
|
362
|
+
Updated.
|
|
363
|
+
If you customized constitution / baseline / handoff commands, check git diff once.
|
|
346
364
|
`)
|
|
347
365
|
}
|
|
348
366
|
|
|
@@ -690,6 +708,9 @@ function main() {
|
|
|
690
708
|
case 'init':
|
|
691
709
|
cmdInit(opts)
|
|
692
710
|
break
|
|
711
|
+
case 'update':
|
|
712
|
+
cmdUpdate(opts)
|
|
713
|
+
break
|
|
693
714
|
case 'check':
|
|
694
715
|
cmdCheck(opts)
|
|
695
716
|
break
|
|
@@ -34,7 +34,7 @@ the table for their app.
|
|
|
34
34
|
| E2E-007 | Request worktrees use `.worktree/<id>`; `.worktree/` gitignored | manual |
|
|
35
35
|
| E2E-008 | Docs require main+develop+feat+fix and typed go-live flows | manual |
|
|
36
36
|
| E2E-009 | After merge, handoff restarts services on develop (`duaer handoff`) | manual |
|
|
37
|
-
| E2E-010 |
|
|
37
|
+
| E2E-010 | `npx duaer-spec update` refreshes an existing install | manual |
|
|
38
38
|
|
|
39
39
|
## Traceability
|
|
40
40
|
|
|
@@ -49,4 +49,4 @@ the table for their app.
|
|
|
49
49
|
| E2E-007 | `.worktree/` + `.gitignore` | Mandatory isolation |
|
|
50
50
|
| E2E-008 | `branching-and-release.md` | Branch + release matrix |
|
|
51
51
|
| E2E-009 | `.duaer/handoff.json` / `duaer handoff` | Service handoff |
|
|
52
|
-
| E2E-010 | `
|
|
52
|
+
| E2E-010 | `duaer update` | One-line refresh |
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "duaer-spec",
|
|
3
|
-
"version": "0.6.
|
|
4
|
-
"description": "Digital employees: autonomous delivery; main/develop/feat/fix;
|
|
3
|
+
"version": "0.6.2",
|
|
4
|
+
"description": "Digital employees: autonomous delivery; main/develop/feat/fix; simple update",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"duaer": "bin/duaer.mjs",
|