@poa-box/agent 0.1.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.
Files changed (139) hide show
  1. package/.env.agent.template +20 -0
  2. package/README.md +46 -0
  3. package/brain/Config/agent-config.json +14 -0
  4. package/brain/Config/brain-allowlist.json +20 -0
  5. package/brain/Identity/goals.template.md +23 -0
  6. package/brain/Identity/how-i-think.md +406 -0
  7. package/brain/Identity/who-i-am.template.md +34 -0
  8. package/brain/Knowledge/BOOTSTRAP.md +66 -0
  9. package/brain/Knowledge/audit-corpus-index.json +406 -0
  10. package/brain/Knowledge/discussions.json +245 -0
  11. package/brain/Knowledge/pop.brain.brainstorms.generated.md +48 -0
  12. package/brain/Knowledge/pop.brain.brainstorms.genesis.bin +0 -0
  13. package/brain/Knowledge/pop.brain.heuristics.snapshot.bin +0 -0
  14. package/brain/Knowledge/pop.brain.projects.generated.md +16 -0
  15. package/brain/Knowledge/pop.brain.projects.genesis.bin +0 -0
  16. package/brain/Knowledge/pop.brain.retros.generated.md +91 -0
  17. package/brain/Knowledge/pop.brain.retros.genesis.bin +0 -0
  18. package/brain/Knowledge/pop.brain.shared.generated.md +3811 -0
  19. package/brain/Knowledge/pop.brain.shared.genesis.bin +0 -0
  20. package/brain/Knowledge/projects.md +181 -0
  21. package/brain/Knowledge/risk-framework.md +90 -0
  22. package/brain/Knowledge/shared.md +416 -0
  23. package/brain/Knowledge/sprint-priorities.md +439 -0
  24. package/brain/Memory/.gitkeep +0 -0
  25. package/dist/commands/agent/daily-digest.d.ts +24 -0
  26. package/dist/commands/agent/daily-digest.js +336 -0
  27. package/dist/commands/agent/delegate.d.ts +12 -0
  28. package/dist/commands/agent/delegate.js +91 -0
  29. package/dist/commands/agent/deploy-to-org.d.ts +20 -0
  30. package/dist/commands/agent/deploy-to-org.js +154 -0
  31. package/dist/commands/agent/index.d.ts +2 -0
  32. package/dist/commands/agent/index.js +27 -0
  33. package/dist/commands/agent/init.d.ts +19 -0
  34. package/dist/commands/agent/init.js +303 -0
  35. package/dist/commands/agent/onboard.d.ts +22 -0
  36. package/dist/commands/agent/onboard.js +192 -0
  37. package/dist/commands/agent/paymaster-status.d.ts +14 -0
  38. package/dist/commands/agent/paymaster-status.js +130 -0
  39. package/dist/commands/agent/register.d.ts +21 -0
  40. package/dist/commands/agent/register.js +116 -0
  41. package/dist/commands/agent/setup-sponsorship.d.ts +22 -0
  42. package/dist/commands/agent/setup-sponsorship.js +154 -0
  43. package/dist/commands/agent/status.d.ts +12 -0
  44. package/dist/commands/agent/status.js +171 -0
  45. package/dist/commands/agent/triage.d.ts +12 -0
  46. package/dist/commands/agent/triage.js +503 -0
  47. package/dist/commands/brain/advance-stage.d.ts +42 -0
  48. package/dist/commands/brain/advance-stage.js +206 -0
  49. package/dist/commands/brain/allowlist.d.ts +30 -0
  50. package/dist/commands/brain/allowlist.js +274 -0
  51. package/dist/commands/brain/append-lesson.d.ts +55 -0
  52. package/dist/commands/brain/append-lesson.js +245 -0
  53. package/dist/commands/brain/brainstorm.d.ts +154 -0
  54. package/dist/commands/brain/brainstorm.js +573 -0
  55. package/dist/commands/brain/daemon.d.ts +31 -0
  56. package/dist/commands/brain/daemon.js +348 -0
  57. package/dist/commands/brain/doctor.d.ts +27 -0
  58. package/dist/commands/brain/doctor.js +497 -0
  59. package/dist/commands/brain/edit-lesson.d.ts +51 -0
  60. package/dist/commands/brain/edit-lesson.js +248 -0
  61. package/dist/commands/brain/import-snapshot.d.ts +68 -0
  62. package/dist/commands/brain/import-snapshot.js +177 -0
  63. package/dist/commands/brain/index.d.ts +2 -0
  64. package/dist/commands/brain/index.js +67 -0
  65. package/dist/commands/brain/list.d.ts +21 -0
  66. package/dist/commands/brain/list.js +83 -0
  67. package/dist/commands/brain/migrate-projects.d.ts +44 -0
  68. package/dist/commands/brain/migrate-projects.js +209 -0
  69. package/dist/commands/brain/migrate.d.ts +74 -0
  70. package/dist/commands/brain/migrate.js +306 -0
  71. package/dist/commands/brain/new-project.d.ts +53 -0
  72. package/dist/commands/brain/new-project.js +226 -0
  73. package/dist/commands/brain/read.d.ts +24 -0
  74. package/dist/commands/brain/read.js +81 -0
  75. package/dist/commands/brain/remove-lesson.d.ts +47 -0
  76. package/dist/commands/brain/remove-lesson.js +206 -0
  77. package/dist/commands/brain/remove-project.d.ts +36 -0
  78. package/dist/commands/brain/remove-project.js +177 -0
  79. package/dist/commands/brain/retro-file-tasks.d.ts +84 -0
  80. package/dist/commands/brain/retro-file-tasks.js +372 -0
  81. package/dist/commands/brain/retro-list.d.ts +28 -0
  82. package/dist/commands/brain/retro-list.js +125 -0
  83. package/dist/commands/brain/retro-mark-change.d.ts +58 -0
  84. package/dist/commands/brain/retro-mark-change.js +176 -0
  85. package/dist/commands/brain/retro-remove.d.ts +36 -0
  86. package/dist/commands/brain/retro-remove.js +142 -0
  87. package/dist/commands/brain/retro-respond.d.ts +56 -0
  88. package/dist/commands/brain/retro-respond.js +250 -0
  89. package/dist/commands/brain/retro-show.d.ts +23 -0
  90. package/dist/commands/brain/retro-show.js +100 -0
  91. package/dist/commands/brain/retro-start.d.ts +55 -0
  92. package/dist/commands/brain/retro-start.js +311 -0
  93. package/dist/commands/brain/search.d.ts +48 -0
  94. package/dist/commands/brain/search.js +190 -0
  95. package/dist/commands/brain/snapshot.d.ts +32 -0
  96. package/dist/commands/brain/snapshot.js +243 -0
  97. package/dist/commands/brain/status.d.ts +15 -0
  98. package/dist/commands/brain/status.js +166 -0
  99. package/dist/commands/brain/subscribe.d.ts +28 -0
  100. package/dist/commands/brain/subscribe.js +90 -0
  101. package/dist/commands/brain/tag.d.ts +46 -0
  102. package/dist/commands/brain/tag.js +192 -0
  103. package/dist/index.d.ts +17 -0
  104. package/dist/index.js +22 -0
  105. package/dist/lib/brain-daemon.d.ts +126 -0
  106. package/dist/lib/brain-daemon.js +811 -0
  107. package/dist/lib/brain-membership.d.ts +58 -0
  108. package/dist/lib/brain-membership.js +115 -0
  109. package/dist/lib/brain-migrate-projects.d.ts +43 -0
  110. package/dist/lib/brain-migrate-projects.js +247 -0
  111. package/dist/lib/brain-migrate.d.ts +77 -0
  112. package/dist/lib/brain-migrate.js +328 -0
  113. package/dist/lib/brain-ops.d.ts +271 -0
  114. package/dist/lib/brain-ops.js +571 -0
  115. package/dist/lib/brain-paths.d.ts +15 -0
  116. package/dist/lib/brain-paths.js +33 -0
  117. package/dist/lib/brain-projections.d.ts +216 -0
  118. package/dist/lib/brain-projections.js +829 -0
  119. package/dist/lib/brain-schemas.d.ts +36 -0
  120. package/dist/lib/brain-schemas.js +316 -0
  121. package/dist/lib/brain-signing.d.ts +103 -0
  122. package/dist/lib/brain-signing.js +256 -0
  123. package/dist/lib/brain.d.ts +198 -0
  124. package/dist/lib/brain.js +1057 -0
  125. package/dist/pop-agent.d.ts +1 -0
  126. package/dist/pop-agent.js +18 -0
  127. package/docs/agent.md +126 -0
  128. package/docs/agents/brain-anti-entropy.md +127 -0
  129. package/docs/agents/brain-cross-device-onboarding.md +210 -0
  130. package/docs/agents/brain-cross-machine-smoke.md +241 -0
  131. package/docs/agents/brain-layer-setup.md +725 -0
  132. package/docs/agents/offboarding-protocol.md +188 -0
  133. package/docs/agents/onboarding-protocol.md +243 -0
  134. package/docs/agents/running-an-agent.md +200 -0
  135. package/docs/brain.md +560 -0
  136. package/package.json +61 -0
  137. package/scripts/apply.sh +140 -0
  138. package/scripts/onboard.sh +205 -0
  139. package/scripts/setup-agent.ts +272 -0
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ /**
3
+ * pop brain append-lesson — user-facing write path into the CRDT brain
4
+ * substrate. Thin wrapper over applyBrainChange that pushes a lesson
5
+ * object onto `doc.lessons` and auto-publishes the new head via
6
+ * gossipsub (step 5) + seeds it for Bitswap (step 6).
7
+ *
8
+ * Before this command, writing a lesson required a Node script that
9
+ * imported dist/lib/brain.js and called applyBrainChange manually.
10
+ * This command closes the last ergonomic gap before the brain
11
+ * substrate is day-to-day usable for heartbeat work.
12
+ *
13
+ * Usage:
14
+ * pop brain append-lesson --doc pop.brain.shared \
15
+ * --title "Don't upgrade libp2p past 2.x" \
16
+ * --body "gossipsub 14 crashes on libp2p 3+ ... "
17
+ *
18
+ * pop brain append-lesson --doc pop.brain.shared \
19
+ * --title "Long form lesson" \
20
+ * --body-file /tmp/lesson.md
21
+ */
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ var desc = Object.getOwnPropertyDescriptor(m, k);
25
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
+ desc = { enumerable: true, get: function() { return m[k]; } };
27
+ }
28
+ Object.defineProperty(o, k2, desc);
29
+ }) : (function(o, m, k, k2) {
30
+ if (k2 === undefined) k2 = k;
31
+ o[k2] = m[k];
32
+ }));
33
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
35
+ }) : function(o, v) {
36
+ o["default"] = v;
37
+ });
38
+ var __importStar = (this && this.__importStar) || (function () {
39
+ var ownKeys = function(o) {
40
+ ownKeys = Object.getOwnPropertyNames || function (o) {
41
+ var ar = [];
42
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
43
+ return ar;
44
+ };
45
+ return ownKeys(o);
46
+ };
47
+ return function (mod) {
48
+ if (mod && mod.__esModule) return mod;
49
+ var result = {};
50
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
51
+ __setModuleDefault(result, mod);
52
+ return result;
53
+ };
54
+ })();
55
+ Object.defineProperty(exports, "__esModule", { value: true });
56
+ exports.appendLessonHandler = void 0;
57
+ const fs_1 = require("fs");
58
+ const path_1 = require("path");
59
+ const ethers_1 = require("ethers");
60
+ const brain_1 = require("../../lib/brain");
61
+ const brain_ops_1 = require("../../lib/brain-ops");
62
+ const idempotency_1 = require("@poa-box/cli/lib/idempotency");
63
+ const output = __importStar(require("@poa-box/cli/lib/output"));
64
+ /**
65
+ * Keep this in sync with the slugify in brain-migrate.ts — these are
66
+ * separate code paths but produce compatible ids.
67
+ */
68
+ function slugify(s) {
69
+ return s
70
+ .toLowerCase()
71
+ .replace(/[^a-z0-9]+/g, '-')
72
+ .replace(/^-+|-+$/g, '')
73
+ .slice(0, 60);
74
+ }
75
+ exports.appendLessonHandler = {
76
+ builder: (yargs) => yargs
77
+ .option('doc', {
78
+ describe: 'Brain document ID (e.g. pop.brain.shared)',
79
+ type: 'string',
80
+ demandOption: true,
81
+ })
82
+ .option('title', {
83
+ describe: 'Short title for the lesson (used as the markdown header + default id)',
84
+ type: 'string',
85
+ demandOption: true,
86
+ })
87
+ .option('body', {
88
+ describe: 'Lesson body text (inline). Prefer --body-file for multi-paragraph content.',
89
+ type: 'string',
90
+ })
91
+ .option('body-file', {
92
+ describe: 'Path to a file whose contents will be used as the lesson body',
93
+ type: 'string',
94
+ })
95
+ .option('author', {
96
+ describe: 'Override the author name (default: signing wallet address)',
97
+ type: 'string',
98
+ })
99
+ .option('id', {
100
+ describe: 'Override the auto-generated lesson id',
101
+ type: 'string',
102
+ })
103
+ .option('allow-invalid-shape', {
104
+ describe: 'Bypass write-time schema validation (Task #346). Use only when you deliberately need a non-canonical shape.',
105
+ type: 'boolean',
106
+ default: false,
107
+ })
108
+ .option('idempotency-key', {
109
+ type: 'string',
110
+ describe: 'Task #370 (HB#214): explicit idempotency key. Two identical append-lesson calls within 15 minutes return the same result without re-submitting. Default: auto-derived from argv (title + body + docId). Scope: author address (brain writes are agent-scoped not org-scoped).',
111
+ })
112
+ .option('no-idempotency', {
113
+ type: 'boolean',
114
+ default: false,
115
+ describe: 'Bypass the idempotency cache and always submit a new lesson.',
116
+ })
117
+ .check((argv) => {
118
+ if (!argv.body && !argv['body-file']) {
119
+ throw new Error('Must supply --body or --body-file');
120
+ }
121
+ return true;
122
+ }),
123
+ handler: async (argv) => {
124
+ try {
125
+ // Resolve body content.
126
+ let body;
127
+ if (argv.bodyFile) {
128
+ const p = (0, path_1.resolve)(argv.bodyFile);
129
+ if (!(0, fs_1.existsSync)(p)) {
130
+ output.error(`--body-file not found: ${p}`);
131
+ process.exitCode = 1;
132
+ return;
133
+ }
134
+ body = (0, fs_1.readFileSync)(p, 'utf8').replace(/\s+$/, '');
135
+ }
136
+ else {
137
+ body = (argv.body ?? '').trim();
138
+ }
139
+ if (!body) {
140
+ output.error('Lesson body is empty.');
141
+ process.exitCode = 1;
142
+ return;
143
+ }
144
+ const now = Math.floor(Date.now() / 1000);
145
+ // Default id: slug(title) + suffix so two lessons with the same
146
+ // title still land at distinct ids. Callers can override with --id
147
+ // when they want a stable key (e.g. upserting a policy rule).
148
+ const id = argv.id ?? `${slugify(argv.title) || 'lesson'}-${now}`;
149
+ // Resolve the author up front — for the default case (no --author
150
+ // flag) we derive the Ethereum address from POP_PRIVATE_KEY so the
151
+ // lesson.author field matches the envelope signer that brain-signing
152
+ // will stamp on the block. Doing this before applyBrainChange keeps
153
+ // the change fn pure and avoids a two-phase update dance.
154
+ let authorLabel;
155
+ if (argv.author) {
156
+ authorLabel = argv.author;
157
+ }
158
+ else {
159
+ const key = process.env.POP_PRIVATE_KEY;
160
+ if (!key) {
161
+ output.error('POP_PRIVATE_KEY not set — cannot derive default author. Pass --author explicitly.');
162
+ process.exitCode = 1;
163
+ return;
164
+ }
165
+ authorLabel = new ethers_1.ethers.Wallet(key).address.toLowerCase();
166
+ }
167
+ // Task #370: idempotency check. Brain writes are agent-scoped
168
+ // (no orgId), so the scope is the author address instead.
169
+ const idempKey = argv.idempotencyKey || (0, idempotency_1.argvToIdempotencyString)(argv);
170
+ if (!argv.noIdempotency) {
171
+ const cached = (0, idempotency_1.checkIdempotencyCache)(authorLabel, 'brain.appendLesson', idempKey);
172
+ if (cached) {
173
+ if (output.isJsonMode()) {
174
+ output.json({
175
+ status: 'ok',
176
+ cached: true,
177
+ ...cached,
178
+ note: 'Prior call within 15-min window produced this result.',
179
+ });
180
+ }
181
+ else {
182
+ console.log('');
183
+ console.log(` Lesson already appended (idempotency cache hit)`);
184
+ console.log(` id: ${cached.lessonId}`);
185
+ console.log(` head: ${cached.headCid}`);
186
+ console.log(` note: Prior call within 15-min window. Use --no-idempotency to force re-submit.`);
187
+ console.log('');
188
+ }
189
+ return;
190
+ }
191
+ }
192
+ // Route through the unified dispatcher (HB#324 ship-2). When a
193
+ // brain daemon is running, this sends the op via IPC so the
194
+ // daemon's long-lived gossipsub mesh handles the publish. When
195
+ // no daemon, it falls back to in-process applyBrainChange via
196
+ // dispatchOp. Same result shape in both cases.
197
+ const result = await (0, brain_ops_1.routedDispatch)({
198
+ type: 'appendLesson',
199
+ docId: argv.doc,
200
+ id,
201
+ title: argv.title,
202
+ body,
203
+ author: authorLabel,
204
+ timestamp: now,
205
+ allowInvalidShape: argv.allowInvalidShape,
206
+ });
207
+ // Task #370: record idempotent result after successful dispatch
208
+ if (!argv.noIdempotency) {
209
+ (0, idempotency_1.recordIdempotentResult)(authorLabel, 'brain.appendLesson', idempKey, {
210
+ docId: argv.doc,
211
+ lessonId: id,
212
+ headCid: result.headCid,
213
+ author: authorLabel,
214
+ });
215
+ }
216
+ if (output.isJsonMode()) {
217
+ output.json({
218
+ status: 'ok',
219
+ docId: argv.doc,
220
+ lessonId: id,
221
+ headCid: result.headCid,
222
+ author: authorLabel,
223
+ envelopeAuthor: result.envelopeAuthor,
224
+ routedViaDaemon: result.routedViaDaemon,
225
+ });
226
+ }
227
+ else {
228
+ console.log('');
229
+ console.log(` Lesson appended to ${argv.doc}`);
230
+ console.log(` id: ${id}`);
231
+ console.log(` author: ${authorLabel}`);
232
+ console.log(` head: ${result.headCid}`);
233
+ console.log(` routed: ${result.routedViaDaemon ? 'via brain daemon' : 'in-process (no daemon)'}`);
234
+ console.log('');
235
+ }
236
+ }
237
+ catch (err) {
238
+ output.error(err.message);
239
+ process.exitCode = 1;
240
+ }
241
+ finally {
242
+ await (0, brain_1.stopBrainNode)();
243
+ }
244
+ },
245
+ };
@@ -0,0 +1,154 @@
1
+ /**
2
+ * pop brain brainstorm-* — cross-agent ideation surface commands.
3
+ *
4
+ * Task #354 phase (b) (HB#208). Forward-looking companion to
5
+ * pop.brain.retros (reactive session retrospectives) and
6
+ * pop.brain.projects (lifecycle state machine for existing projects).
7
+ *
8
+ * The brainstorm surface is the missing deliberation primitive for
9
+ * new ideation: agents post a theme/question, debate it via messages +
10
+ * ideas + per-agent votes (support/explore/oppose), and top-ranked
11
+ * ideas get promoted to pop.brain.projects at the `propose` stage.
12
+ * Promotion links back via the `promotedToProjectIds` array.
13
+ *
14
+ * All commands dispatch through routedDispatch so they work with or
15
+ * without the brain daemon. Schema validation (#346) catches malformed
16
+ * writes at applyBrainChange time.
17
+ *
18
+ * Five sub-commands registered from src/commands/brain/index.ts:
19
+ * pop brain brainstorm-start — open a new brainstorm
20
+ * pop brain brainstorm-respond — post message / add idea / cast vote
21
+ * pop brain brainstorm-promote — promote an idea to a brain project
22
+ * pop brain brainstorm-close — close a brainstorm with no promotion
23
+ * pop brain brainstorm-remove — soft-delete tombstone
24
+ */
25
+ import type { Argv, ArgumentsCamelCase } from 'yargs';
26
+ interface StartArgs {
27
+ doc: string;
28
+ title: string;
29
+ prompt: string;
30
+ author?: string;
31
+ id?: string;
32
+ windowFromHb?: number;
33
+ windowToHb?: number;
34
+ }
35
+ export declare const brainstormStartHandler: {
36
+ builder: (yargs: Argv) => Argv<{
37
+ doc: string;
38
+ } & {
39
+ title: string;
40
+ } & {
41
+ prompt: string;
42
+ } & {
43
+ author: string | undefined;
44
+ } & {
45
+ id: string | undefined;
46
+ } & {
47
+ "window-from-hb": number | undefined;
48
+ } & {
49
+ "window-to-hb": number | undefined;
50
+ } & {
51
+ "idempotency-key": string | undefined;
52
+ } & {
53
+ "no-idempotency": boolean;
54
+ }>;
55
+ handler: (argv: ArgumentsCamelCase<StartArgs>) => Promise<void>;
56
+ };
57
+ interface RespondArgs {
58
+ doc: string;
59
+ id: string;
60
+ author?: string;
61
+ message?: string;
62
+ addIdea?: string;
63
+ vote?: string[];
64
+ }
65
+ export declare const brainstormRespondHandler: {
66
+ builder: (yargs: Argv) => Argv<{
67
+ doc: string;
68
+ } & {
69
+ id: string;
70
+ } & {
71
+ author: string | undefined;
72
+ } & {
73
+ message: string | undefined;
74
+ } & {
75
+ "add-idea": string | undefined;
76
+ } & {
77
+ vote: string[] | undefined;
78
+ } & {
79
+ "idempotency-key": string | undefined;
80
+ } & {
81
+ "no-idempotency": boolean;
82
+ }>;
83
+ handler: (argv: ArgumentsCamelCase<RespondArgs>) => Promise<void>;
84
+ };
85
+ interface PromoteArgs {
86
+ doc: string;
87
+ id: string;
88
+ ideaId: string;
89
+ projectId: string;
90
+ author?: string;
91
+ }
92
+ export declare const brainstormPromoteHandler: {
93
+ builder: (yargs: Argv) => Argv<{
94
+ doc: string;
95
+ } & {
96
+ id: string;
97
+ } & {
98
+ "idea-id": string;
99
+ } & {
100
+ "project-id": string;
101
+ } & {
102
+ author: string | undefined;
103
+ } & {
104
+ "idempotency-key": string | undefined;
105
+ } & {
106
+ "no-idempotency": boolean;
107
+ }>;
108
+ handler: (argv: ArgumentsCamelCase<PromoteArgs>) => Promise<void>;
109
+ };
110
+ interface CloseArgs {
111
+ doc: string;
112
+ id: string;
113
+ reason?: string;
114
+ author?: string;
115
+ }
116
+ export declare const brainstormCloseHandler: {
117
+ builder: (yargs: Argv) => Argv<{
118
+ doc: string;
119
+ } & {
120
+ id: string;
121
+ } & {
122
+ reason: string | undefined;
123
+ } & {
124
+ author: string | undefined;
125
+ } & {
126
+ "idempotency-key": string | undefined;
127
+ } & {
128
+ "no-idempotency": boolean;
129
+ }>;
130
+ handler: (argv: ArgumentsCamelCase<CloseArgs>) => Promise<void>;
131
+ };
132
+ interface RemoveArgs {
133
+ doc: string;
134
+ id: string;
135
+ reason?: string;
136
+ author?: string;
137
+ }
138
+ export declare const brainstormRemoveHandler: {
139
+ builder: (yargs: Argv) => Argv<{
140
+ doc: string;
141
+ } & {
142
+ id: string;
143
+ } & {
144
+ reason: string | undefined;
145
+ } & {
146
+ author: string | undefined;
147
+ } & {
148
+ "idempotency-key": string | undefined;
149
+ } & {
150
+ "no-idempotency": boolean;
151
+ }>;
152
+ handler: (argv: ArgumentsCamelCase<RemoveArgs>) => Promise<void>;
153
+ };
154
+ export {};