create-byan-agent 2.41.0 → 2.44.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.
- package/CHANGELOG.md +144 -0
- package/install/bin/byan-handoff.js +139 -0
- package/install/bin/byan-kanban.js +1 -1
- package/install/bin/create-byan-agent-v2.js +133 -112
- package/install/lib/byan-leantime-integration.js +2 -2
- package/install/lib/byan-web-integration.js +5 -5
- package/install/lib/claude-native-setup.js +11 -11
- package/install/lib/codex-native-setup.js +96 -4
- package/install/lib/exchange/agent-packager.js +1 -1
- package/install/lib/mcp-extensions/gdrive.js +5 -5
- package/install/lib/mcp-extensions/index.js +5 -5
- package/install/lib/phase2-chat.js +21 -21
- package/install/lib/platforms/claude-code.js +2 -2
- package/install/lib/project-agents-generator.js +4 -4
- package/install/lib/project-handoff.js +300 -0
- package/install/lib/rtk-integration.js +81 -14
- package/install/lib/staging-consent.js +1 -1
- package/install/lib/subagent-generator.js +2 -3
- package/install/lib/utils/logger.js +4 -4
- package/install/lib/utils/node-detector.js +1 -1
- package/install/lib/yanstaller/agent-launcher.js +1 -1
- package/install/lib/yanstaller/index.js +11 -116
- package/install/lib/yanstaller/platform-selector.js +11 -11
- package/install/src/byan-v2/dispatcher/task-router.js +1 -1
- package/install/src/index.js +1 -1
- package/install/src/webui/api.js +0 -13
- package/install/src/webui/chat/bridge.js +1 -1
- package/install/src/webui/chat/cli-detector.js +1 -1
- package/install/templates/.claude/CLAUDE.md +16 -0
- package/install/templates/.claude/rules/native-workflows.md +22 -14
- package/install/templates/.claude/settings.json +24 -24
- package/install/templates/.claude/skills/byan-byan/SKILL.md +14 -0
- package/install/templates/.claude/skills/byan-codex/SKILL.md +7 -0
- package/install/templates/.codex/skills/byan/SKILL.md +77 -0
- package/install/templates/_byan/COMPLETION-REPORT.md +0 -1
- package/install/templates/_byan/INDEX.md +6 -2
- package/install/templates/_byan/_config/workflow-manifest.csv +1 -1
- package/install/templates/_byan/core/activation/soul-activation.md +3 -3
- package/install/templates/_byan/mcp/byan-mcp-server/bin/byan-lint-workflows.js +6 -3
- package/install/templates/_byan/mcp/byan-mcp-server/lib/native-tiers.js +35 -17
- package/install/templates/_byan/mcp/byan-mcp-server/lib/workflows-lint.js +38 -0
- package/install/templates/_byan/mcp/byan-mcp-server/skill-bundles-manifest.json +2 -2
- package/install/templates/_byan/worker/workers.md +1 -1
- package/install/templates/_byan/workflow/simple/byan/project-handoff-workflow.md +90 -0
- package/install/templates/dist/skill-bundles/byan-byan.zip +0 -0
- package/install/templates/dist/skill-bundles/byan-codex.zip +0 -0
- package/install/templates/docs/codex-auto-delegation.md +140 -0
- package/package.json +2 -1
- package/src/byan-v2/dispatcher/task-router.js +1 -1
- package/src/byan-v2/lib/layout-resolver.js +3 -6
- package/install/lib/yanstaller/installer.js +0 -138
- package/install/lib/yanstaller/interviewer.js +0 -88
- package/install/lib/yanstaller/recommender.js +0 -102
- package/install/lib/yanstaller/troubleshooter.js +0 -89
- package/install/lib/yanstaller/validator.js +0 -198
- package/install/lib/yanstaller/wizard.js +0 -109
- package/install/src/byan-v2/dispatcher/task-tool-interface-mock.js +0 -134
- package/install/src/byan-v2/dispatcher/task-tool-interface.js +0 -123
- package/install/templates/_bmad/bmb/agents/agent-builder.md +0 -59
- package/install/templates/_bmad/bmb/agents/byan-test.md +0 -116
- package/install/templates/_bmad/bmb/agents/byan.md +0 -215
- package/install/templates/_bmad/bmb/agents/marc.md +0 -303
- package/install/templates/_bmad/bmb/agents/module-builder.md +0 -60
- package/install/templates/_bmad/bmb/agents/patnote.md +0 -495
- package/install/templates/_bmad/bmb/agents/rachid.md +0 -184
- package/install/templates/_bmad/bmb/agents/workflow-builder.md +0 -61
- package/install/templates/_bmad/bmb/workflows/byan/data/mantras.yaml +0 -272
- package/install/templates/_bmad/bmb/workflows/byan/data/templates.yaml +0 -59
- package/install/templates/_bmad/bmb/workflows/byan/delete-agent-workflow.md +0 -657
- package/install/templates/_bmad/bmb/workflows/byan/edit-agent-workflow.md +0 -688
- package/install/templates/_bmad/bmb/workflows/byan/interview-workflow.md +0 -753
- package/install/templates/_bmad/bmb/workflows/byan/quick-create-workflow.md +0 -450
- package/install/templates/_bmad/bmb/workflows/byan/templates/base-agent-template.md +0 -79
- package/install/templates/_bmad/bmb/workflows/byan/validate-agent-workflow.md +0 -676
- package/install/templates/_bmad/core/agents/carmack.md +0 -238
- package/src/byan-v2/dispatcher/task-tool-interface-mock.js +0 -134
- package/src/byan-v2/dispatcher/task-tool-interface.js +0 -123
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,150 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [2.44.0] - 2026-07-15
|
|
13
|
+
|
|
14
|
+
### Changed - Revived the Sonnet middle tier for native-workflow model routing
|
|
15
|
+
|
|
16
|
+
- Native-workflow ANALYSIS leaves (score/rank/assess/design/nfr/coverage/
|
|
17
|
+
recommend/synthesize) now auto-route to the balanced tier (`model: 'sonnet'`)
|
|
18
|
+
instead of `deep` (inherit the session model). Before this, the Sonnet rung was
|
|
19
|
+
reachable only through the explicit `mech-` opt-in, so on an Opus (or high-effort)
|
|
20
|
+
session every analysis/verification/implementation leaf ran on Opus — the Sonnet
|
|
21
|
+
tier was effectively dead (ledger: recent workflows logged all-`inherit`).
|
|
22
|
+
- This deliberately overrides the session model for analysis leaves; a genuinely
|
|
23
|
+
frontier analysis opts back to the session model with the `deep-` label prefix
|
|
24
|
+
(`deep-assess-architecture`), the mirror of the `mech-` opt-in. VERIFICATION and
|
|
25
|
+
IMPLEMENTATION are untouched — a wrong check or a code-write still inherits the
|
|
26
|
+
session model (no silent downgrade of the dangerous classes).
|
|
27
|
+
- Propagated through the enforcement stack: `modelRoutingViolations` accepts sonnet
|
|
28
|
+
on an analysis leaf (its tier) and still blocks haiku (`analysis-below-tier`) and
|
|
29
|
+
any downgrade on a protected leaf; added a non-blocking `untiered-analysis`
|
|
30
|
+
advisory (surfaces an analysis leaf running deep, suggests `model: 'sonnet'`).
|
|
31
|
+
Files: `native-tiers.js` (tierFor + `DEEP_PREFIX` + `synthes` keyword),
|
|
32
|
+
`workflows-lint.js`, `bin/byan-lint-workflows.js`, native-workflows.md.
|
|
33
|
+
- The 21 committed workflows still pass the contract; MCP 792 + jest 2606 green.
|
|
34
|
+
|
|
35
|
+
## [2.43.0] - 2026-07-10
|
|
36
|
+
|
|
37
|
+
### Removed - Purged the Gen1 `_bmad/` legacy layer
|
|
38
|
+
|
|
39
|
+
- Removed the Gen1 `_bmad/` fallback from the layout resolver
|
|
40
|
+
(`src/byan-v2/lib/layout-resolver.js`): `resolveAgent` / `agentDirs` now resolve
|
|
41
|
+
Gen3 (`_byan/agent/<name>/`) and Gen2 (`_byan/agents/`, `_byan/<module>/agents/`)
|
|
42
|
+
only. A pre-Gen3 project on the raw `_bmad/` layout is migrated with
|
|
43
|
+
`scripts/migrate-bmad-to-byan.js` (agents land under `_byan/`, resolved by the
|
|
44
|
+
Gen2 branches). Added a regression test locking Gen1 resolution to null.
|
|
45
|
+
- Deleted the frozen Gen1 content: `_bmad/` (677 files) and the dead shipped
|
|
46
|
+
template `install/templates/_bmad/` (17 files) that the installer does not copy
|
|
47
|
+
(it scaffolds `templates/_byan/`). Neither carried a live code path.
|
|
48
|
+
- Removed the dead `marc` agent residues (a GitHub Copilot CLI specialist for the
|
|
49
|
+
already-removed Copilot platform, present only under `_bmad/`): the
|
|
50
|
+
`subagent-generator` model-map key, an `agent-launcher` jsdoc example, and the
|
|
51
|
+
`marc.md` entry in the migrator's agent list.
|
|
52
|
+
- Migrated `_bmad` doc references to `_byan` (CLAUDE.md, QUICK-START,
|
|
53
|
+
GUIDE-UTILISATION, soul-activation, workers) and cleaned stale Gen1
|
|
54
|
+
comments / dead branches (agent-packager, bridge, cli-detector, index example).
|
|
55
|
+
- Kept the migration back-compat intact: the webui legacy-install detection, the
|
|
56
|
+
`migrate-bmad-to-byan` script, `stub-sync`, and the `_bmad-output` user-data scan.
|
|
57
|
+
|
|
58
|
+
### Note - Known follow-up
|
|
59
|
+
|
|
60
|
+
- `install/install.sh` (a dormant legacy shell installer) still scaffolds a Gen1
|
|
61
|
+
`_bmad/` tree and promotes GitHub Copilot CLI. It ships but is not run by the
|
|
62
|
+
npx flow. It needs a dedicated rework to align with the Gen3-only, Copilot-free
|
|
63
|
+
product; deliberately left out of this purge to avoid touching an untested
|
|
64
|
+
installer path.
|
|
65
|
+
|
|
66
|
+
## [2.42.1] - 2026-07-06
|
|
67
|
+
|
|
68
|
+
### Changed - Excised the dead stub half of the yanstaller module
|
|
69
|
+
|
|
70
|
+
- Removed six pure-stub files under `install/lib/yanstaller/` that had no caller
|
|
71
|
+
(`installer.js`, `validator.js`, `recommender.js`, `interviewer.js`,
|
|
72
|
+
`troubleshooter.js`, `wizard.js`). `installer.js` faked a successful install
|
|
73
|
+
without touching the disk; `validator.js` returned `passed: true` for its ten
|
|
74
|
+
checks without inspecting anything. The real installer is
|
|
75
|
+
`install/bin/create-byan-agent-v2.js`.
|
|
76
|
+
- Dropped the half-implemented `install()`/`uninstall()` orchestrator from
|
|
77
|
+
`install/lib/yanstaller/index.js`. The live surface consumed by the CLI
|
|
78
|
+
(`update` / `rollback` / `backups` / `check`) and the web UI is untouched:
|
|
79
|
+
`update`, `rollback`, `listBackups`, plus the `detector` / `platformSelector`
|
|
80
|
+
/ `updater` / `backuper` modules.
|
|
81
|
+
- Removed the dead `yanstaller.install()` call from the web UI install path
|
|
82
|
+
(`install/src/webui/api.js`); it already had its own directory/config
|
|
83
|
+
fallback and had logged that call as a stub.
|
|
84
|
+
- Added `install/__tests__/yanstaller/no-stub-guard.test.js`, a regression guard
|
|
85
|
+
that keeps the excised stubs from creeping back and locks the surviving public
|
|
86
|
+
surface. Net: -853 / +11 lines shipped to npm consumers.
|
|
87
|
+
|
|
88
|
+
### Changed - Purged emoji from the installer CLI output (Mantra IA-23)
|
|
89
|
+
|
|
90
|
+
- Removed every emoji from the 16 live installer files under `install/lib/` and
|
|
91
|
+
`install/bin/` (201 occurrences). Status glyphs became bracket tags matching
|
|
92
|
+
the existing `[DEBUG]` idiom: `[OK]` / `[INFO]` / `[WARN]` / `[ERROR]` / `[x]`;
|
|
93
|
+
decorative glyphs were dropped and the arrow `->` de-symbolized. Message text,
|
|
94
|
+
colors, and control flow are unchanged (a `git diff -w` is emoji-only).
|
|
95
|
+
- Updated the two coupled tests in lockstep: `install/__tests__/utils/logger.test.js`
|
|
96
|
+
and `install/__tests__/integration/platform-integration.test.js`.
|
|
97
|
+
|
|
98
|
+
### Removed - Dead Copilot-era task-tool-interface stub
|
|
99
|
+
|
|
100
|
+
- Deleted `task-tool-interface.js` + `-mock.js` from both `src/byan-v2/dispatcher/`
|
|
101
|
+
and `install/src/byan-v2/dispatcher/`, plus their test. The module had no caller
|
|
102
|
+
outside its own test. Scrubbed the five stale `TaskToolInterface` doc references
|
|
103
|
+
it left behind (`task-router` JSDoc + `COMPLETION-REPORT.md`).
|
|
104
|
+
|
|
105
|
+
## [2.42.0] - 2026-07-06
|
|
106
|
+
|
|
107
|
+
### Fixed - Shipped Claude Code hooks no longer spam MODULE_NOT_FOUND
|
|
108
|
+
- **Every hook command in the shipped `.claude/settings.json` is now
|
|
109
|
+
self-guarded.** The hooks run on every tool (empty matcher); a bare
|
|
110
|
+
`node "$CLAUDE_PROJECT_DIR"/.claude/hooks/X.js` threw `MODULE_NOT_FOUND` on
|
|
111
|
+
every tool call whenever the script was not resolvable — a non-BYAN project, an
|
|
112
|
+
empty `$CLAUDE_PROJECT_DIR`, a partial install, or version drift. Each command
|
|
113
|
+
is now `p="$CLAUDE_PROJECT_DIR/.claude/hooks/X.js"; [ -f "$p" ] || exit 0; exec
|
|
114
|
+
node "$p"`: a missing script no-ops with exit 0 (the tool proceeds), a present
|
|
115
|
+
script runs via `exec` so its exit code is preserved (a blocking PreToolUse /
|
|
116
|
+
Stop guard still blocks). Covered by
|
|
117
|
+
`install/__tests__/hook-invocation-guard.test.js` (guarded-shape on all 24
|
|
118
|
+
commands + runtime sh simulation: absent/empty -> 0, blocker -> 2, stdin
|
|
119
|
+
passthrough).
|
|
120
|
+
|
|
121
|
+
### Changed - Handoff auto-import instructions
|
|
122
|
+
- **Claude and Codex activation surfaces now know how to handle
|
|
123
|
+
`importe depuis claude` / `importe depuis codex` automatically.** `CLAUDE.md`
|
|
124
|
+
and BYAN skills instruct the assistant to run
|
|
125
|
+
`byan-handoff latest --from <source> --prompt` and resume from the generated
|
|
126
|
+
context without relying on native assistant memory.
|
|
127
|
+
|
|
128
|
+
### Added - Portable Claude/Codex Markdown handoff
|
|
129
|
+
- **BYAN can now export/import project state as a portable Markdown handoff for
|
|
130
|
+
switching between Claude Code and Codex.** The new `byan-handoff` CLI writes
|
|
131
|
+
handoffs under `_byan-output/handoffs/`, embeds a parseable
|
|
132
|
+
`json byan-handoff` block, and can print a compact resume prompt via
|
|
133
|
+
`byan-handoff latest --from <source> --prompt` or
|
|
134
|
+
`byan-handoff import <file> --prompt`.
|
|
135
|
+
A new `project-handoff` BYAN workflow documents the limit-switch protocol.
|
|
136
|
+
Covered by `install/__tests__/project-handoff.test.js`.
|
|
137
|
+
|
|
138
|
+
### Changed - RTK offered on Codex-selected installs
|
|
139
|
+
- **Yanstaller now offers RTK when the selected target includes Codex, not only
|
|
140
|
+
Claude Code.** Claude Code keeps the transparent `rtk init -g --auto-patch`
|
|
141
|
+
hook path. Codex installs get the verified native `rtk` binary and an explicit
|
|
142
|
+
no-transparent-hook status, matching BYAN's current Codex adapter model.
|
|
143
|
+
Covered by `install/__tests__/rtk-integration.test.js`.
|
|
144
|
+
|
|
145
|
+
### Added - Codex native skills in yanstaller
|
|
146
|
+
- **Codex installs now get real native skills, not just project prompt stubs.**
|
|
147
|
+
When the yanstaller target includes Codex (Codex-only or Claude+Codex), it
|
|
148
|
+
writes the BYAN MCP entry to `~/.codex/config.toml` and copies BYAN skill
|
|
149
|
+
folders into `~/.codex/skills`, creating `~/.codex` when Codex was explicitly
|
|
150
|
+
selected. The project template also ships `.codex/skills/byan/SKILL.md`, so a
|
|
151
|
+
fresh Codex install has a native skill named `byan` in addition to the
|
|
152
|
+
Claude-derived BYAN specialty skills. This closes the gap where a fresh
|
|
153
|
+
machine had `.codex/prompts/` and MCP wiring but no native `$byan` / BYAN skill
|
|
154
|
+
surface for delegation. Covered by `install/__tests__/codex-native-setup.test.js`.
|
|
155
|
+
|
|
12
156
|
### Added - Codex auto-delegation (opt-in, native)
|
|
13
157
|
- **BYAN now proposes handing delegable work to Codex on your ChatGPT
|
|
14
158
|
subscription (no API credit) when Claude nears its 5h limit.** A
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const {
|
|
7
|
+
buildHandoff,
|
|
8
|
+
latestHandoff,
|
|
9
|
+
parseMarkdown,
|
|
10
|
+
renderMarkdown,
|
|
11
|
+
renderResumePrompt,
|
|
12
|
+
writeHandoff,
|
|
13
|
+
} = require('../lib/project-handoff');
|
|
14
|
+
|
|
15
|
+
function usage() {
|
|
16
|
+
return [
|
|
17
|
+
'byan-handoff export [--from claude|codex] [--to codex|claude] [--task <text>] [--summary <text>] [--next <text>] [--out <file>] [--root <dir>] [--stdout]',
|
|
18
|
+
'byan-handoff import <file> [--prompt] [--json] [--root <dir>]',
|
|
19
|
+
'byan-handoff latest [--from claude|codex] [--prompt] [--json] [--root <dir>]',
|
|
20
|
+
].join('\n');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function parseArgs(argv) {
|
|
24
|
+
const args = {
|
|
25
|
+
cmd: argv[2] || 'export',
|
|
26
|
+
root: process.cwd(),
|
|
27
|
+
from: null,
|
|
28
|
+
to: null,
|
|
29
|
+
task: null,
|
|
30
|
+
summary: null,
|
|
31
|
+
out: null,
|
|
32
|
+
stdout: false,
|
|
33
|
+
prompt: false,
|
|
34
|
+
json: false,
|
|
35
|
+
next: [],
|
|
36
|
+
decisions: [],
|
|
37
|
+
blockers: [],
|
|
38
|
+
commands: [],
|
|
39
|
+
notes: [],
|
|
40
|
+
file: null,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
for (let i = 3; i < argv.length; i++) {
|
|
44
|
+
const a = argv[i];
|
|
45
|
+
if (a === '--root') args.root = argv[++i];
|
|
46
|
+
else if (a === '--from') args.from = argv[++i];
|
|
47
|
+
else if (a === '--to') args.to = argv[++i];
|
|
48
|
+
else if (a === '--task') args.task = argv[++i];
|
|
49
|
+
else if (a === '--summary') args.summary = argv[++i];
|
|
50
|
+
else if (a === '--out') args.out = argv[++i];
|
|
51
|
+
else if (a === '--stdout') args.stdout = true;
|
|
52
|
+
else if (a === '--prompt') args.prompt = true;
|
|
53
|
+
else if (a === '--json') args.json = true;
|
|
54
|
+
else if (a === '--next') args.next.push(argv[++i]);
|
|
55
|
+
else if (a === '--decision') args.decisions.push(argv[++i]);
|
|
56
|
+
else if (a === '--blocker') args.blockers.push(argv[++i]);
|
|
57
|
+
else if (a === '--command') args.commands.push(argv[++i]);
|
|
58
|
+
else if (a === '--note') args.notes.push(argv[++i]);
|
|
59
|
+
else if (a === '-h' || a === '--help') args.help = true;
|
|
60
|
+
else if (!args.file) args.file = a;
|
|
61
|
+
else throw new Error(`Unexpected argument: ${a}`);
|
|
62
|
+
}
|
|
63
|
+
return args;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function readHandoffFile(file) {
|
|
67
|
+
return parseMarkdown(fs.readFileSync(file, 'utf8'));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function printImported(handoff, args) {
|
|
71
|
+
if (args.json) {
|
|
72
|
+
process.stdout.write(JSON.stringify(handoff, null, 2) + '\n');
|
|
73
|
+
} else if (args.prompt) {
|
|
74
|
+
process.stdout.write(renderResumePrompt(handoff) + '\n');
|
|
75
|
+
} else {
|
|
76
|
+
process.stdout.write(renderMarkdown(handoff) + '\n');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function main() {
|
|
81
|
+
try {
|
|
82
|
+
const args = parseArgs(process.argv);
|
|
83
|
+
if (args.help) {
|
|
84
|
+
console.log(usage());
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const root = path.resolve(args.root);
|
|
89
|
+
if (args.cmd === 'export') {
|
|
90
|
+
const handoff = buildHandoff({
|
|
91
|
+
root,
|
|
92
|
+
from: args.from,
|
|
93
|
+
to: args.to,
|
|
94
|
+
task: args.task,
|
|
95
|
+
summary: args.summary,
|
|
96
|
+
nextActions: args.next,
|
|
97
|
+
decisions: args.decisions,
|
|
98
|
+
blockers: args.blockers,
|
|
99
|
+
commands: args.commands,
|
|
100
|
+
notes: args.notes,
|
|
101
|
+
});
|
|
102
|
+
if (args.stdout) {
|
|
103
|
+
process.stdout.write(renderMarkdown(handoff) + '\n');
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const result = writeHandoff(root, handoff, { outPath: args.out });
|
|
107
|
+
process.stdout.write(`${result.path}\n`);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (args.cmd === 'import') {
|
|
112
|
+
if (!args.file) throw new Error('Missing handoff file');
|
|
113
|
+
printImported(readHandoffFile(path.resolve(root, args.file)), args);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (args.cmd === 'latest') {
|
|
118
|
+
const file = latestHandoff(root, { from: args.from });
|
|
119
|
+
if (!file) {
|
|
120
|
+
const suffix = args.from ? ` from ${args.from}` : '';
|
|
121
|
+
throw new Error(`No handoff${suffix} found under _byan-output/handoffs`);
|
|
122
|
+
}
|
|
123
|
+
if (!args.prompt && !args.json) {
|
|
124
|
+
process.stdout.write(`${file}\n`);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
printImported(readHandoffFile(file), args);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
throw new Error(`Unknown command: ${args.cmd}`);
|
|
132
|
+
} catch (err) {
|
|
133
|
+
process.stderr.write(`byan-handoff: ${err.message}\n`);
|
|
134
|
+
process.stderr.write(usage() + '\n');
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
main();
|
|
@@ -86,7 +86,7 @@ function renderStandups(entries) {
|
|
|
86
86
|
const blockers = e.blockers && e.blockers.length > 0
|
|
87
87
|
? FG(COLORS.blocked, ` blockers=${e.blockers.join('|')}`)
|
|
88
88
|
: '';
|
|
89
|
-
return `${e.timestamp} ${e.agent}: ${e.did || '-'}${blockers}
|
|
89
|
+
return `${e.timestamp} ${e.agent}: ${e.did || '-'}${blockers} -> ${e.next || '-'}`;
|
|
90
90
|
})
|
|
91
91
|
.join('\n');
|
|
92
92
|
}
|