@monoes/monomindcli 2.16.13 → 2.16.14

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 (171) hide show
  1. package/README.md +1 -1
  2. package/dist/src/commands/org-control.d.ts +117 -0
  3. package/dist/src/commands/org-control.d.ts.map +1 -0
  4. package/dist/src/commands/org-control.js +274 -0
  5. package/dist/src/commands/org-control.js.map +1 -0
  6. package/dist/src/commands/org-lifecycle.d.ts +7 -0
  7. package/dist/src/commands/org-lifecycle.d.ts.map +1 -0
  8. package/dist/src/commands/org-lifecycle.js +298 -0
  9. package/dist/src/commands/org-lifecycle.js.map +1 -0
  10. package/dist/src/commands/org-manage.d.ts +7 -0
  11. package/dist/src/commands/org-manage.d.ts.map +1 -0
  12. package/dist/src/commands/org-manage.js +357 -0
  13. package/dist/src/commands/org-manage.js.map +1 -0
  14. package/dist/src/commands/org-memory-command.d.ts +3 -0
  15. package/dist/src/commands/org-memory-command.d.ts.map +1 -0
  16. package/dist/src/commands/org-memory-command.js +178 -0
  17. package/dist/src/commands/org-memory-command.js.map +1 -0
  18. package/dist/src/commands/org-observe-approvals.d.ts +8 -0
  19. package/dist/src/commands/org-observe-approvals.d.ts.map +1 -0
  20. package/dist/src/commands/org-observe-approvals.js +211 -0
  21. package/dist/src/commands/org-observe-approvals.js.map +1 -0
  22. package/dist/src/commands/org-observe-checkpoint.d.ts +26 -0
  23. package/dist/src/commands/org-observe-checkpoint.d.ts.map +1 -0
  24. package/dist/src/commands/org-observe-checkpoint.js +180 -0
  25. package/dist/src/commands/org-observe-checkpoint.js.map +1 -0
  26. package/dist/src/commands/org-observe-config.d.ts +8 -0
  27. package/dist/src/commands/org-observe-config.d.ts.map +1 -0
  28. package/dist/src/commands/org-observe-config.js +160 -0
  29. package/dist/src/commands/org-observe-config.js.map +1 -0
  30. package/dist/src/commands/org-observe-gates.d.ts +4 -0
  31. package/dist/src/commands/org-observe-gates.d.ts.map +1 -0
  32. package/dist/src/commands/org-observe-gates.js +182 -0
  33. package/dist/src/commands/org-observe-gates.js.map +1 -0
  34. package/dist/src/commands/org-observe-inbox.d.ts +18 -0
  35. package/dist/src/commands/org-observe-inbox.d.ts.map +1 -0
  36. package/dist/src/commands/org-observe-inbox.js +154 -0
  37. package/dist/src/commands/org-observe-inbox.js.map +1 -0
  38. package/dist/src/commands/org-observe-logs.d.ts +31 -0
  39. package/dist/src/commands/org-observe-logs.d.ts.map +1 -0
  40. package/dist/src/commands/org-observe-logs.js +272 -0
  41. package/dist/src/commands/org-observe-logs.js.map +1 -0
  42. package/dist/src/commands/org-observe-questions.d.ts +8 -0
  43. package/dist/src/commands/org-observe-questions.d.ts.map +1 -0
  44. package/dist/src/commands/org-observe-questions.js +201 -0
  45. package/dist/src/commands/org-observe-questions.js.map +1 -0
  46. package/dist/src/commands/org-observe-report.d.ts +8 -0
  47. package/dist/src/commands/org-observe-report.d.ts.map +1 -0
  48. package/dist/src/commands/org-observe-report.js +366 -0
  49. package/dist/src/commands/org-observe-report.js.map +1 -0
  50. package/dist/src/commands/org-observe-shared.d.ts +20 -0
  51. package/dist/src/commands/org-observe-shared.d.ts.map +1 -0
  52. package/dist/src/commands/org-observe-shared.js +55 -0
  53. package/dist/src/commands/org-observe-shared.js.map +1 -0
  54. package/dist/src/commands/org-observe.d.ts +9 -101
  55. package/dist/src/commands/org-observe.d.ts.map +1 -1
  56. package/dist/src/commands/org-observe.js +12 -1675
  57. package/dist/src/commands/org-observe.js.map +1 -1
  58. package/dist/src/commands/org-poll.d.ts +57 -0
  59. package/dist/src/commands/org-poll.d.ts.map +1 -0
  60. package/dist/src/commands/org-poll.js +194 -0
  61. package/dist/src/commands/org-poll.js.map +1 -0
  62. package/dist/src/commands/org-run.d.ts +3 -0
  63. package/dist/src/commands/org-run.d.ts.map +1 -0
  64. package/dist/src/commands/org-run.js +449 -0
  65. package/dist/src/commands/org-run.js.map +1 -0
  66. package/dist/src/commands/org-serve.d.ts +19 -0
  67. package/dist/src/commands/org-serve.d.ts.map +1 -0
  68. package/dist/src/commands/org-serve.js +395 -0
  69. package/dist/src/commands/org-serve.js.map +1 -0
  70. package/dist/src/commands/org-subcommands-config.d.ts +8 -0
  71. package/dist/src/commands/org-subcommands-config.d.ts.map +1 -0
  72. package/dist/src/commands/org-subcommands-config.js +93 -0
  73. package/dist/src/commands/org-subcommands-config.js.map +1 -0
  74. package/dist/src/commands/org-subcommands-hil.d.ts +11 -0
  75. package/dist/src/commands/org-subcommands-hil.d.ts.map +1 -0
  76. package/dist/src/commands/org-subcommands-hil.js +216 -0
  77. package/dist/src/commands/org-subcommands-hil.js.map +1 -0
  78. package/dist/src/commands/org-subcommands-observe.d.ts +12 -0
  79. package/dist/src/commands/org-subcommands-observe.d.ts.map +1 -0
  80. package/dist/src/commands/org-subcommands-observe.js +249 -0
  81. package/dist/src/commands/org-subcommands-observe.js.map +1 -0
  82. package/dist/src/commands/org-subcommands-runtime.d.ts +12 -0
  83. package/dist/src/commands/org-subcommands-runtime.d.ts.map +1 -0
  84. package/dist/src/commands/org-subcommands-runtime.js +163 -0
  85. package/dist/src/commands/org-subcommands-runtime.js.map +1 -0
  86. package/dist/src/commands/org.d.ts +3 -151
  87. package/dist/src/commands/org.d.ts.map +1 -1
  88. package/dist/src/commands/org.js +43 -2735
  89. package/dist/src/commands/org.js.map +1 -1
  90. package/dist/src/orgrt/daemon-types.d.ts +196 -0
  91. package/dist/src/orgrt/daemon-types.d.ts.map +1 -0
  92. package/dist/src/orgrt/daemon-types.js +38 -0
  93. package/dist/src/orgrt/daemon-types.js.map +1 -0
  94. package/dist/src/orgrt/daemon.d.ts +70 -300
  95. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  96. package/dist/src/orgrt/daemon.js +41 -2536
  97. package/dist/src/orgrt/daemon.js.map +1 -1
  98. package/dist/src/orgrt/idle-watchdog.d.ts +39 -0
  99. package/dist/src/orgrt/idle-watchdog.d.ts.map +1 -0
  100. package/dist/src/orgrt/idle-watchdog.js +289 -0
  101. package/dist/src/orgrt/idle-watchdog.js.map +1 -0
  102. package/dist/src/orgrt/org-reload.d.ts +7 -0
  103. package/dist/src/orgrt/org-reload.d.ts.map +1 -0
  104. package/dist/src/orgrt/org-reload.js +111 -0
  105. package/dist/src/orgrt/org-reload.js.map +1 -0
  106. package/dist/src/orgrt/org-start-steps.d.ts +21 -0
  107. package/dist/src/orgrt/org-start-steps.d.ts.map +1 -0
  108. package/dist/src/orgrt/org-start-steps.js +305 -0
  109. package/dist/src/orgrt/org-start-steps.js.map +1 -0
  110. package/dist/src/orgrt/org-start.d.ts +7 -0
  111. package/dist/src/orgrt/org-start.d.ts.map +1 -0
  112. package/dist/src/orgrt/org-start.js +435 -0
  113. package/dist/src/orgrt/org-start.js.map +1 -0
  114. package/dist/src/orgrt/org-state-file.d.ts +8 -0
  115. package/dist/src/orgrt/org-state-file.d.ts.map +1 -0
  116. package/dist/src/orgrt/org-state-file.js +116 -0
  117. package/dist/src/orgrt/org-state-file.js.map +1 -0
  118. package/dist/src/orgrt/org-stop.d.ts +6 -0
  119. package/dist/src/orgrt/org-stop.d.ts.map +1 -0
  120. package/dist/src/orgrt/org-stop.js +332 -0
  121. package/dist/src/orgrt/org-stop.js.map +1 -0
  122. package/dist/src/orgrt/org-tools.d.ts +11 -0
  123. package/dist/src/orgrt/org-tools.d.ts.map +1 -0
  124. package/dist/src/orgrt/org-tools.js +305 -0
  125. package/dist/src/orgrt/org-tools.js.map +1 -0
  126. package/dist/src/orgrt/role-incarnation.d.ts +18 -0
  127. package/dist/src/orgrt/role-incarnation.d.ts.map +1 -0
  128. package/dist/src/orgrt/role-incarnation.js +374 -0
  129. package/dist/src/orgrt/role-incarnation.js.map +1 -0
  130. package/dist/src/orgrt/role-respawn.d.ts +7 -0
  131. package/dist/src/orgrt/role-respawn.d.ts.map +1 -0
  132. package/dist/src/orgrt/role-respawn.js +318 -0
  133. package/dist/src/orgrt/role-respawn.js.map +1 -0
  134. package/dist/src/orgrt/role-session-opts.d.ts +389 -0
  135. package/dist/src/orgrt/role-session-opts.d.ts.map +1 -0
  136. package/dist/src/orgrt/role-session-opts.js +289 -0
  137. package/dist/src/orgrt/role-session-opts.js.map +1 -0
  138. package/dist/src/orgrt/runner-resolve.d.ts +43 -0
  139. package/dist/src/orgrt/runner-resolve.d.ts.map +1 -0
  140. package/dist/src/orgrt/runner-resolve.js +77 -0
  141. package/dist/src/orgrt/runner-resolve.js.map +1 -0
  142. package/dist/src/orgrt/session-gate.d.ts +34 -0
  143. package/dist/src/orgrt/session-gate.d.ts.map +1 -0
  144. package/dist/src/orgrt/session-gate.js +74 -0
  145. package/dist/src/orgrt/session-gate.js.map +1 -0
  146. package/dist/src/orgrt/session-prompt.d.ts +31 -0
  147. package/dist/src/orgrt/session-prompt.d.ts.map +1 -0
  148. package/dist/src/orgrt/session-prompt.js +115 -0
  149. package/dist/src/orgrt/session-prompt.js.map +1 -0
  150. package/dist/src/orgrt/session-run.d.ts +18 -0
  151. package/dist/src/orgrt/session-run.d.ts.map +1 -0
  152. package/dist/src/orgrt/session-run.js +429 -0
  153. package/dist/src/orgrt/session-run.js.map +1 -0
  154. package/dist/src/orgrt/session-stream.d.ts +21 -0
  155. package/dist/src/orgrt/session-stream.d.ts.map +1 -0
  156. package/dist/src/orgrt/session-stream.js +173 -0
  157. package/dist/src/orgrt/session-stream.js.map +1 -0
  158. package/dist/src/orgrt/session-types.d.ts +219 -0
  159. package/dist/src/orgrt/session-types.d.ts.map +1 -0
  160. package/dist/src/orgrt/session-types.js +2 -0
  161. package/dist/src/orgrt/session-types.js.map +1 -0
  162. package/dist/src/orgrt/session-usage.d.ts +29 -0
  163. package/dist/src/orgrt/session-usage.d.ts.map +1 -0
  164. package/dist/src/orgrt/session-usage.js +64 -0
  165. package/dist/src/orgrt/session-usage.js.map +1 -0
  166. package/dist/src/orgrt/session.d.ts +5 -281
  167. package/dist/src/orgrt/session.d.ts.map +1 -1
  168. package/dist/src/orgrt/session.js +8 -1117
  169. package/dist/src/orgrt/session.js.map +1 -1
  170. package/dist/tsconfig.tsbuildinfo +1 -1
  171. package/package.json +6 -6
@@ -0,0 +1,357 @@
1
+ // packages/@monomind/cli/src/commands/org-manage.ts
2
+ //
3
+ // `monomind org test-loop | list | delete | mark-complete | migrate` — org
4
+ // config and run-record management.
5
+ import { existsSync, readFileSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';
6
+ import { join, resolve } from 'node:path';
7
+ import { migrateOrgFile } from '../orgrt/migrate.js';
8
+ import { ORG_DIR } from '../orgrt/types.js';
9
+ import { output } from '../output.js';
10
+ import { listOrgConfigFiles, ORG_ARTIFACT_SUFFIXES, ORG_NAME_RE, validateOrgName, } from './org-control.js';
11
+ const log = (text) => {
12
+ console.log(text);
13
+ };
14
+ /** True when runtime.json records a running org whose recorded pid is still alive. */
15
+ const isOrgRunning = (cwd, name) => {
16
+ try {
17
+ const rt = JSON.parse(readFileSync(join(cwd, ORG_DIR, name, 'runtime.json'), 'utf8'));
18
+ if (rt.status !== 'running' || !rt.pid)
19
+ return false;
20
+ process.kill(rt.pid, 0); // throws if the pid is gone (crashed daemon left a stale file)
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ };
27
+ export const testLoopAction = async (ctx) => {
28
+ // non-literal specifier: test-loop.ts lands in a later task; keeps tsc clean until then
29
+ const testLoopModule = '../orgrt/test-loop.js';
30
+ const { runTestLoop } = (await import(testLoopModule));
31
+ const n = Number(ctx.flags.times ?? ctx.flags.n ?? 5);
32
+ const scenario = typeof ctx.flags.scenario === 'string' ? ctx.flags.scenario : undefined;
33
+ const report = await runTestLoop(ctx.cwd, n, scenario);
34
+ log(output.info(report.summary));
35
+ return { success: report.failed === 0, message: report.summary };
36
+ };
37
+ // ---- legacy management subcommands (list / delete / mark-complete) ----
38
+ export const listAction = async (ctx) => {
39
+ const orgsDir = join(ctx.cwd || process.cwd(), ORG_DIR);
40
+ if (!existsSync(orgsDir)) {
41
+ if (ctx.flags.format === 'json') {
42
+ process.stdout.write(`${JSON.stringify({ v: 1, items: [] })}\n`);
43
+ return { success: true };
44
+ }
45
+ log(output.info('No orgs directory found. Create an org first with /mastermind:createorg'));
46
+ return { success: true };
47
+ }
48
+ const configs = listOrgConfigFiles(orgsDir);
49
+ if (!configs.length) {
50
+ if (ctx.flags.format === 'json') {
51
+ process.stdout.write(`${JSON.stringify({ v: 1, items: [] })}\n`);
52
+ return { success: true };
53
+ }
54
+ log(output.info('No orgs found.'));
55
+ return { success: true };
56
+ }
57
+ if (ctx.flags.format === 'json') {
58
+ const items = configs.map((f) => {
59
+ const stem = f.replace(/\.json$/, '');
60
+ try {
61
+ const def = JSON.parse(readFileSync(join(orgsDir, f), 'utf8'));
62
+ let status = 'never run';
63
+ try {
64
+ const rt = JSON.parse(readFileSync(join(orgsDir, stem, 'runtime.json'), 'utf8'));
65
+ status = rt.status ?? status;
66
+ // Same liveness rule as `org status`: a 'running' record with a dead
67
+ // pid is a crashed daemon, not a running org — list must not disagree.
68
+ if (status === 'running' && rt.pid) {
69
+ try {
70
+ process.kill(rt.pid, 0);
71
+ }
72
+ catch {
73
+ status = 'crashed';
74
+ }
75
+ }
76
+ }
77
+ catch {
78
+ /* no runtime state yet */
79
+ }
80
+ return {
81
+ name: stem,
82
+ roles: Array.isArray(def.roles) ? def.roles.length : 0,
83
+ schedule: def.schedule ?? null,
84
+ status,
85
+ goal: typeof def.goal === 'string' ? def.goal : '',
86
+ };
87
+ }
88
+ catch {
89
+ return { name: stem, roles: 0, schedule: null, status: 'invalid-config', goal: '' };
90
+ }
91
+ });
92
+ process.stdout.write(`${JSON.stringify({ v: 1, items })}\n`);
93
+ return { success: true };
94
+ }
95
+ log(output.info(`Found ${configs.length} org(s):`));
96
+ for (const f of configs) {
97
+ const stem = f.replace(/\.json$/, '');
98
+ let detail = '';
99
+ try {
100
+ const def = JSON.parse(readFileSync(join(orgsDir, f), 'utf8'));
101
+ const roles = Array.isArray(def.roles) ? def.roles.length : 0;
102
+ const sched = def.schedule ? `every ${def.schedule}` : 'manual';
103
+ let status = 'never run';
104
+ try {
105
+ const rt = JSON.parse(readFileSync(join(orgsDir, stem, 'runtime.json'), 'utf8'));
106
+ status = rt.status ?? status;
107
+ // Same liveness rule as `org status`: a 'running' record with a dead
108
+ // pid is a crashed daemon, not a running org — list must not disagree.
109
+ if (status === 'running' && rt.pid) {
110
+ try {
111
+ process.kill(rt.pid, 0);
112
+ }
113
+ catch {
114
+ status = 'crashed';
115
+ }
116
+ }
117
+ }
118
+ catch {
119
+ /* no runtime state yet */
120
+ }
121
+ const goal = typeof def.goal === 'string' && def.goal
122
+ ? ` — ${def.goal.length > 60 ? `${def.goal.slice(0, 57)}...` : def.goal}`
123
+ : '';
124
+ detail = ` (${roles} role${roles === 1 ? '' : 's'}, ${sched}, ${status})${goal}`;
125
+ }
126
+ catch {
127
+ detail = ' (unreadable config — run `monomind org validate`)';
128
+ }
129
+ log(output.info(` • ${stem}${detail}`));
130
+ }
131
+ return { success: true };
132
+ };
133
+ export const deleteAction = async (ctx) => {
134
+ const orgName = ctx.args[0];
135
+ if (!orgName) {
136
+ log(output.error('Usage: monomind org delete <name>'));
137
+ return { success: false, message: 'org name required' };
138
+ }
139
+ if (!ORG_NAME_RE.test(orgName)) {
140
+ log(output.error(`Invalid org name: ${orgName}`));
141
+ return { success: false, message: 'invalid org name' };
142
+ }
143
+ const confirmed = ctx.flags.yes === true || ctx.args.includes('--yes') || ctx.args.includes('-y');
144
+ if (!confirmed) {
145
+ log(output.warning(`This will permanently delete org "${orgName}" and all its data.`));
146
+ log(output.warning('Pass --yes to confirm.'));
147
+ return { success: false, message: 'confirmation required' };
148
+ }
149
+ const cwd = resolve(ctx.cwd || process.cwd());
150
+ const orgsDir = join(cwd, ORG_DIR);
151
+ const configFile = join(orgsDir, `${orgName}.json`);
152
+ if (!existsSync(configFile)) {
153
+ log(output.error(`Org not found: ${orgName}`));
154
+ return { success: false, message: 'org not found' };
155
+ }
156
+ if (isOrgRunning(cwd, orgName) && ctx.flags.force !== true) {
157
+ log(output.error(`Org "${orgName}" is currently running — stop it first (monomind org stop ${orgName}) or pass --force.`));
158
+ return { success: false, message: 'org is running' };
159
+ }
160
+ let removed = 0;
161
+ for (const suf of ['', ...ORG_ARTIFACT_SUFFIXES]) {
162
+ for (const ext of ['.json', '.jsonl']) {
163
+ const f = join(orgsDir, `${orgName}${suf}${ext}`);
164
+ try {
165
+ if (existsSync(f)) {
166
+ unlinkSync(f);
167
+ removed++;
168
+ }
169
+ }
170
+ catch {
171
+ /* ignore */
172
+ }
173
+ }
174
+ }
175
+ try {
176
+ unlinkSync(join(orgsDir, '.stops', `${orgName}.stop`));
177
+ }
178
+ catch {
179
+ /* ignore */
180
+ }
181
+ const orgSubDir = join(orgsDir, orgName);
182
+ try {
183
+ if (existsSync(orgSubDir))
184
+ rmSync(orgSubDir, { recursive: true, force: true });
185
+ }
186
+ catch {
187
+ /* ignore */
188
+ }
189
+ try {
190
+ unlinkSync(join(cwd, '.monomind', 'loops', `${orgName}.md`));
191
+ }
192
+ catch {
193
+ /* ignore */
194
+ }
195
+ try {
196
+ unlinkSync(join(orgsDir, `${orgName}-run.md`));
197
+ }
198
+ catch {
199
+ /* ignore */
200
+ }
201
+ log(output.success(`Org "${orgName}" deleted (${removed} file(s) removed).`));
202
+ return { success: true };
203
+ };
204
+ /** Clear a stale `running` record from runtime.json. This is the state `org status`
205
+ * reads, so mark-complete MUST touch it — the dashboard's run:complete event alone
206
+ * left `org status` reporting the same "crashed" line it had just told the user to
207
+ * fix with this exact command. Refuses when the recorded pid is still alive: a live
208
+ * daemon would just rewrite the file, and `org stop` is the right command there. */
209
+ const clearStaleRuntime = (cwd, name) => {
210
+ const rtPath = join(cwd, ORG_DIR, name, 'runtime.json');
211
+ if (!existsSync(rtPath))
212
+ return { cleared: false, reason: 'absent' };
213
+ let rt;
214
+ try {
215
+ rt = JSON.parse(readFileSync(rtPath, 'utf8'));
216
+ }
217
+ catch (err) {
218
+ return {
219
+ cleared: false,
220
+ reason: 'unreadable',
221
+ detail: err instanceof Error ? err.message : String(err),
222
+ };
223
+ }
224
+ if (rt.status !== 'running' && rt.status !== 'crashed')
225
+ return { cleared: false, reason: 'not-running' };
226
+ if (rt.status === 'running' && rt.pid) {
227
+ try {
228
+ process.kill(rt.pid, 0);
229
+ return { cleared: false, reason: 'alive', detail: String(rt.pid) };
230
+ }
231
+ catch {
232
+ /* pid is gone — this is exactly the stale case mark-complete exists for */
233
+ }
234
+ }
235
+ // Same shape stopOrg's persistState() writes, so every reader (org status,
236
+ // isOrgRunning, the mastermind-org* skills' jq checks) sees a stopped org.
237
+ writeFileSync(rtPath, JSON.stringify({
238
+ status: 'stopped',
239
+ run: rt.run,
240
+ pid: rt.pid,
241
+ updated: new Date().toISOString(),
242
+ closedBy: 'mark-complete',
243
+ }, null, 2));
244
+ return { cleared: true, run: rt.run };
245
+ };
246
+ export const markCompleteAction = async (ctx) => {
247
+ const orgName = ctx.args[0];
248
+ if (!orgName || !ORG_NAME_RE.test(orgName)) {
249
+ log(output.error('Usage: monomind org mark-complete <name>'));
250
+ return { success: false, message: 'valid org name required' };
251
+ }
252
+ const cwd = resolve(ctx.cwd || process.cwd());
253
+ // Reject an org that does not exist, using the same check as runAction. Without
254
+ // it `org mark-complete nosuchorg` printed "local state was cleared" and exited
255
+ // 0 — a typo looked like a successful cleanup.
256
+ const orgsDir = join(cwd, ORG_DIR);
257
+ if (!existsSync(join(orgsDir, `${orgName}.json`))) {
258
+ const known = existsSync(orgsDir)
259
+ ? listOrgConfigFiles(orgsDir).map((f) => f.replace(/\.json$/, ''))
260
+ : [];
261
+ log(output.error(`Org not found: ${orgName}${known.length ? ` — available: ${known.join(', ')}` : ''}`));
262
+ return { success: false, message: 'org not found' };
263
+ }
264
+ // 1) Local runtime.json — the state `org status` actually reads. Done first and
265
+ // independently of the dashboard so the recommended remedy works with no server.
266
+ const local = clearStaleRuntime(cwd, orgName);
267
+ if (!local.cleared && local.reason === 'alive') {
268
+ log(output.error(`Org "${orgName}" is still running (pid ${local.detail}) — stop it with "monomind org stop ${orgName}" instead.`));
269
+ return { success: false, message: 'org is running' };
270
+ }
271
+ if (local.cleared)
272
+ log(output.success(`Cleared stale runtime state for "${orgName}"${local.run ? ` (run ${local.run})` : ''}.`));
273
+ else if (local.reason === 'unreadable')
274
+ log(output.warning(`runtime.json for "${orgName}" is unreadable (${local.detail}) — left untouched.`));
275
+ else
276
+ log(output.info(`No stale runtime state for "${orgName}" (runtime.json ${local.reason === 'absent' ? 'absent' : 'already not running'}).`));
277
+ // 2) Dashboard run:complete event — best effort. A missing/unauthorized dashboard
278
+ // must not make the command fail after the local state was already cleared.
279
+ let ctrlUrl = 'http://localhost:4242';
280
+ try {
281
+ const ctl = JSON.parse(readFileSync(join(cwd, '.monomind', 'control.json'), 'utf8'));
282
+ if (ctl.url)
283
+ ctrlUrl = ctl.url;
284
+ }
285
+ catch {
286
+ /* default */
287
+ }
288
+ try {
289
+ // All dashboard /api routes are auth-gated — attach the local session token.
290
+ let auth = '';
291
+ try {
292
+ auth = readFileSync(join(cwd, '.monomind', 'dashboard-token'), 'utf8').trim();
293
+ }
294
+ catch {
295
+ /* server may be pre-auth */
296
+ }
297
+ // Bounded. Updating the dashboard is best-effort — the local state has
298
+ // already been cleared by this point — but the fetch had no timeout, so a
299
+ // dashboard that holds the port without answering (a wedged build from an
300
+ // earlier session; see the stale-dashboard issue) hung `mark-complete`
301
+ // indefinitely. "Unreachable" and "not answering" must cost the same.
302
+ const res = await fetch(`${ctrlUrl}/api/orgs/${encodeURIComponent(orgName)}/mark-complete`, {
303
+ method: 'POST',
304
+ headers: auth ? { 'x-monomind-token': auth } : {},
305
+ signal: AbortSignal.timeout(5_000),
306
+ });
307
+ const body = await res.json().catch(() => ({}));
308
+ if (!res.ok) {
309
+ log(output.warning(`Dashboard not updated (${res.status}: ${body.error || 'unknown error'}) — ${local.cleared ? 'local state was cleared' : 'there was no local state to clear'}.`));
310
+ }
311
+ else {
312
+ const runId = body.runId;
313
+ log(output.success(`Dashboard run marked complete for "${orgName}"${runId ? ` (run ${runId})` : ''}.`));
314
+ }
315
+ }
316
+ catch (err) {
317
+ log(output.warning(`Dashboard unreachable at ${ctrlUrl} (${err instanceof Error ? err.message : 'error'}) — ${local.cleared ? 'local state was cleared' : 'there was no local state to clear'}.`));
318
+ }
319
+ return local.cleared
320
+ ? { success: true, message: `run marked complete for ${orgName}` }
321
+ : { success: true, message: `nothing to clear for ${orgName}` };
322
+ };
323
+ export const migrateAction = async (ctx) => {
324
+ const validated = validateOrgName(ctx.args[0]);
325
+ if (!validated.ok)
326
+ return validated.result;
327
+ const name = validated.name;
328
+ const cwd = ctx.cwd;
329
+ const cfgPath = join(cwd, ORG_DIR, `${name}.json`);
330
+ if (!existsSync(cfgPath)) {
331
+ log(output.error(`Org not found: ${name}`));
332
+ return { success: false, message: 'org not found' };
333
+ }
334
+ if (isOrgRunning(cwd, name)) {
335
+ log(output.error(`Org "${name}" is currently running — stop it first, then migrate.`));
336
+ return { success: false, message: 'org is running' };
337
+ }
338
+ try {
339
+ const outcome = migrateOrgFile(cfgPath, join(cwd, ORG_DIR, `${name}.v1.json`));
340
+ if (outcome.status === 'already-v2') {
341
+ log(output.info(`${name}: already v2 — nothing to migrate.`));
342
+ return { success: true, message: 'already v2' };
343
+ }
344
+ log(output.success(`${name}: migrated to v2 (backup: ${name}.v1.json)`));
345
+ for (const d of outcome.dropped)
346
+ log(output.info(` dropped v1 field: ${d}`));
347
+ for (const n of outcome.notes)
348
+ log(output.info(` ${n}`));
349
+ log(output.info(` run it with: monomind org run ${name}`));
350
+ return { success: true, message: `migrated ${name}` };
351
+ }
352
+ catch (err) {
353
+ log(output.error(`Cannot migrate ${name}: ${err instanceof Error ? err.message : String(err)}`));
354
+ return { success: false, message: 'migration produced an invalid config' };
355
+ }
356
+ };
357
+ //# sourceMappingURL=org-manage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-manage.js","sourceRoot":"","sources":["../../../src/commands/org-manage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from '../types.js';
2
+ export declare const memorySubcommand: Command;
3
+ //# sourceMappingURL=org-memory-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-memory-command.d.ts","sourceRoot":"","sources":["../../../src/commands/org-memory-command.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAO1E,eAAO,MAAM,gBAAgB,EAAE,OAiL9B,CAAC"}
@@ -0,0 +1,178 @@
1
+ // packages/@monomind/cli/src/commands/org-memory-command.ts
2
+ //
3
+ // `monomind org memory` — inspect an org's cross-run memory and knowledge graph.
4
+ import { existsSync, readFileSync } from 'node:fs';
5
+ import { ORG_DIR, OrgDefSchema } from '../orgrt/types.js';
6
+ import { output } from '../output.js';
7
+ import { validateOrgName } from './org-control.js';
8
+ const log = (text) => {
9
+ console.log(text);
10
+ };
11
+ export const memorySubcommand = {
12
+ name: 'memory',
13
+ description: "Inspect an org's cross-run memory and knowledge graph (stats | search <query> | rules | rollback <run-ref> | promote <run-ref>)",
14
+ examples: [
15
+ { command: 'monomind org memory growth stats', description: 'KG size and namespaces' },
16
+ {
17
+ command: 'monomind org memory growth search "launch checklist"',
18
+ description: 'Search org memory + KG',
19
+ },
20
+ {
21
+ command: 'monomind org memory growth rollback run:m4x2',
22
+ description: "Withdraw one run's support from this org's KG",
23
+ },
24
+ {
25
+ command: 'monomind org memory growth promote run:m4x2',
26
+ description: "Share one run's claims with project-wide knowledge",
27
+ },
28
+ ],
29
+ action: async (ctx) => {
30
+ const v = validateOrgName(ctx.args[0]);
31
+ if (!v.ok)
32
+ return v.result;
33
+ const sub = String(ctx.args[1] ?? 'stats');
34
+ const { join } = await import('node:path');
35
+ const cwd = ctx.cwd || process.cwd();
36
+ const dbPath = join(cwd, '.monomind', 'org-memory');
37
+ const kg = await import('../memory/memory-kg.js');
38
+ const bridge = await import('../memory/memory-bridge.js');
39
+ const { orgKgScope, orgMemoryNamespace } = await import('../orgrt/org-memory.js');
40
+ // Every KG operation below is scoped to the requested org, so the org
41
+ // name in the output describes what was actually read, not just what
42
+ // was asked for. Reads of the shared store are unchanged.
43
+ const scope = orgKgScope(v.name);
44
+ const kgNs = kg.kgNamespaces(scope);
45
+ // Flat org memory is namespaced by the org DEFINITION, not by name —
46
+ // resolve it the way the runtime writes it (B4), so a configured
47
+ // `memory_namespace` is searched instead of a guessed `org:<name>`.
48
+ const defPath = join(cwd, ORG_DIR, `${v.name}.json`);
49
+ const flatNs = existsSync(defPath)
50
+ ? orgMemoryNamespace(v.name, OrgDefSchema.parse(JSON.parse(readFileSync(defPath, 'utf8'))))
51
+ : `org:${v.name}`;
52
+ try {
53
+ if (sub === 'stats') {
54
+ const [stats, glossary, backend] = await Promise.all([
55
+ kg.kgStats({ dbPath, scope }),
56
+ kg.kgGlossary({ dbPath, limit: 15, scope }),
57
+ bridge.bridgeGetBackendStats(dbPath),
58
+ ]);
59
+ // The backend reports every namespace in the SHARED store, so
60
+ // listing it raw put other orgs' namespaces (and their counts)
61
+ // under this org's name. Keep only what this org owns.
62
+ // Spread kgNs rather than listing namespaces: the identity work
63
+ // added `names` (the entity name index), and a hand-written list
64
+ // silently omits any namespace added later, hiding rows this org
65
+ // does own.
66
+ const owned = new Set([...Object.values(kgNs), flatNs]);
67
+ const byNs = Object.fromEntries(Object.entries(backend?.entriesByNamespace ?? {}).filter(([ns]) => owned.has(ns) || ns.startsWith(`agent:${flatNs}:`)));
68
+ if (ctx.flags.format === 'json') {
69
+ const payload = { v: 1, org: v.name, ...stats, glossary, namespaces: byNs };
70
+ process.stdout.write(`${JSON.stringify(payload)}\n`);
71
+ return { success: true, data: payload };
72
+ }
73
+ log(output.info(`Knowledge graph: ${stats.nodes} entities, ${stats.edges} relations, ${stats.rules} rules`));
74
+ if (glossary.length)
75
+ log(output.info(`Top entities: ${glossary.join(', ')}`));
76
+ for (const [ns, count] of Object.entries(byNs))
77
+ log(output.info(` ${ns}: ${count} entries`));
78
+ return {
79
+ success: true,
80
+ message: 'org memory stats',
81
+ data: { ...stats, namespaces: byNs },
82
+ };
83
+ }
84
+ if (sub === 'search') {
85
+ const q = ctx.args.slice(2).join(' ');
86
+ if (!q)
87
+ return { success: false, message: 'usage: org memory <org> search <query>' };
88
+ const [mem, graph] = await Promise.all([
89
+ bridge.bridgeSearchEntries({
90
+ query: q,
91
+ namespace: flatNs,
92
+ limit: 5,
93
+ dbPath,
94
+ }),
95
+ kg.kgSearch({ query: q, dbPath, limit: 8, scope }),
96
+ ]);
97
+ if (ctx.flags.format === 'json') {
98
+ const payload = {
99
+ v: 1,
100
+ org: v.name,
101
+ query: q,
102
+ memories: mem?.results ?? [],
103
+ triplets: graph.triplets,
104
+ kg_context: graph.context ?? null,
105
+ };
106
+ process.stdout.write(`${JSON.stringify(payload)}\n`);
107
+ return { success: true, data: payload };
108
+ }
109
+ for (const r of mem?.results ?? [])
110
+ log(output.info(`[${r.score.toFixed(2)}] ${r.key}: ${r.content.slice(0, 160)}`));
111
+ if (graph.context)
112
+ log(output.info(`\nKnowledge graph:\n${graph.context}`));
113
+ return {
114
+ success: true,
115
+ message: `${(mem?.results ?? []).length} memories, ${graph.triplets.length} triplets`,
116
+ };
117
+ }
118
+ if (sub === 'rules') {
119
+ const rules = await kg.kgListRules({ dbPath, limit: 50, scope });
120
+ if (ctx.flags.format === 'json') {
121
+ const payload = { v: 1, org: v.name, items: rules };
122
+ process.stdout.write(`${JSON.stringify(payload)}\n`);
123
+ return { success: true, data: payload };
124
+ }
125
+ for (const r of rules)
126
+ log(output.info(`- ${r.rule.slice(0, 200)}`));
127
+ return { success: true, message: `${rules.length} rules`, data: { rules } };
128
+ }
129
+ if (sub === 'rollback') {
130
+ const ref = ctx.args[2];
131
+ if (!ref)
132
+ return {
133
+ success: false,
134
+ message: 'usage: org memory <org> rollback <origin-ref> (e.g. run:m4x2)',
135
+ };
136
+ // Scoped: the ref is resolved inside this org's namespaces and
137
+ // origin space, so the org name in the command is an ownership
138
+ // restriction rather than a label on an unfiltered rollback.
139
+ const res = await kg.kgRollback({ originRef: ref, scope, dbPath });
140
+ if (ctx.flags.format === 'json') {
141
+ const payload = { v: 1, org: v.name, ref, ...res };
142
+ process.stdout.write(`${JSON.stringify(payload)}\n`);
143
+ return { success: res.success, data: payload };
144
+ }
145
+ log(output.info(`Rolled back ${ref} for org ${v.name}: ${res.deleted} deleted, ${res.retained} retained (shared with other origins)`));
146
+ return { success: res.success, message: `rollback ${ref}`, data: res };
147
+ }
148
+ if (sub === 'promote') {
149
+ const ref = ctx.args[2];
150
+ if (!ref)
151
+ return {
152
+ success: false,
153
+ message: 'usage: org memory <org> promote <origin-ref> (e.g. run:m4x2)',
154
+ };
155
+ const res = await kg.kgPromote({ originRef: ref, from: scope, dbPath });
156
+ if (ctx.flags.format === 'json') {
157
+ const payload = { v: 1, org: v.name, ref, ...res };
158
+ process.stdout.write(`${JSON.stringify(payload)}\n`);
159
+ return { success: res.success, data: payload };
160
+ }
161
+ log(output.info(res.success
162
+ ? `Promoted ${ref} from org ${v.name} to project-shared knowledge: ${res.nodes} entities, ${res.edges} relations, ${res.rules} rules. Withdraw with origin ref ${res.promotedAs}.`
163
+ : `Promotion of ${ref} failed: ${res.error ?? 'unknown error'}`));
164
+ return { success: res.success, message: `promote ${ref}`, data: res };
165
+ }
166
+ return {
167
+ success: false,
168
+ message: `unknown subcommand "${sub}" — use stats | search | rules | rollback | promote`,
169
+ };
170
+ }
171
+ finally {
172
+ await bridge.shutdownBridge().catch(() => {
173
+ /* best effort */
174
+ });
175
+ }
176
+ },
177
+ };
178
+ //# sourceMappingURL=org-memory-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-memory-command.js","sourceRoot":"","sources":["../../../src/commands/org-memory-command.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,iFAAiF;AAEjF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,GAAG,GAAG,CAAC,IAAY,EAAQ,EAAE;IACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAY;IACvC,IAAI,EAAE,QAAQ;IACd,WAAW,EACT,iIAAiI;IACnI,QAAQ,EAAE;QACR,EAAE,OAAO,EAAE,kCAAkC,EAAE,WAAW,EAAE,wBAAwB,EAAE;QACtF;YACE,OAAO,EAAE,sDAAsD;YAC/D,WAAW,EAAE,wBAAwB;SACtC;QACD;YACE,OAAO,EAAE,8CAA8C;YACvD,WAAW,EAAE,+CAA+C;SAC7D;QACD;YACE,OAAO,EAAE,6CAA6C;YACtD,WAAW,EAAE,oDAAoD;SAClE;KACF;IACD,MAAM,EAAE,KAAK,EAAE,GAAmB,EAA0B,EAAE;QAC5D,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,OAAO,CAAC,CAAC,MAAM,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QAC1D,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAClF,sEAAsE;QACtE,qEAAqE;QACrE,0DAA0D;QAC1D,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpC,qEAAqE;QACrE,iEAAiE;QACjE,oEAAoE;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;YAChC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3F,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACnD,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;oBAC7B,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;oBAC3C,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC;iBACrC,CAAC,CAAC;gBACH,8DAA8D;gBAC9D,+DAA+D;gBAC/D,uDAAuD;gBACvD,gEAAgE;gBAChE,iEAAiE;gBACjE,iEAAiE;gBACjE,YAAY;gBACZ,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChE,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAC7B,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC,MAAM,CACtD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,MAAM,GAAG,CAAC,CAC7D,CACF,CAAC;gBACF,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAChC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;oBAC5E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC1C,CAAC;gBACD,GAAG,CACD,MAAM,CAAC,IAAI,CACT,oBAAoB,KAAK,CAAC,KAAK,cAAc,KAAK,CAAC,KAAK,eAAe,KAAK,CAAC,KAAK,QAAQ,CAC3F,CACF,CAAC;gBACF,IAAI,QAAQ,CAAC,MAAM;oBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9E,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;oBAC5C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChD,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,kBAAkB;oBAC3B,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;iBACrC,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAI,CAAC,CAAC;oBAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAC;gBACrF,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACrC,MAAM,CAAC,mBAAmB,CAAC;wBACzB,KAAK,EAAE,CAAC;wBACR,SAAS,EAAE,MAAM;wBACjB,KAAK,EAAE,CAAC;wBACR,MAAM;qBACP,CAAC;oBACF,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;iBACnD,CAAC,CAAC;gBACH,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAChC,MAAM,OAAO,GAAG;wBACd,CAAC,EAAE,CAAC;wBACJ,GAAG,EAAE,CAAC,CAAC,IAAI;wBACX,KAAK,EAAE,CAAC;wBACR,QAAQ,EAAE,GAAG,EAAE,OAAO,IAAI,EAAE;wBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,UAAU,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;qBAClC,CAAC;oBACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC1C,CAAC;gBACD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,OAAO,IAAI,EAAE;oBAChC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnF,IAAI,KAAK,CAAC,OAAO;oBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC5E,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,cAAc,KAAK,CAAC,QAAQ,CAAC,MAAM,WAAW;iBACtF,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACjE,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAChC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;oBACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACrD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC1C,CAAC;gBACD,KAAK,MAAM,CAAC,IAAI,KAAK;oBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;YAC9E,CAAC;YACD,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG;oBACN,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,+DAA+D;qBACzE,CAAC;gBACJ,+DAA+D;gBAC/D,+DAA+D;gBAC/D,6DAA6D;gBAC7D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACnE,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAChC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;oBACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACrD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBACjD,CAAC;gBACD,GAAG,CACD,MAAM,CAAC,IAAI,CACT,eAAe,GAAG,YAAY,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,aAAa,GAAG,CAAC,QAAQ,uCAAuC,CACrH,CACF,CAAC;gBACF,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YACzE,CAAC;YACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG;oBACN,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,OAAO,EAAE,8DAA8D;qBACxE,CAAC;gBACJ,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACxE,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAChC,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;oBACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACrD,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBACjD,CAAC;gBACD,GAAG,CACD,MAAM,CAAC,IAAI,CACT,GAAG,CAAC,OAAO;oBACT,CAAC,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,IAAI,iCAAiC,GAAG,CAAC,KAAK,cAAc,GAAG,CAAC,KAAK,eAAe,GAAG,CAAC,KAAK,oCAAoC,GAAG,CAAC,UAAU,GAAG;oBAClL,CAAC,CAAC,gBAAgB,GAAG,YAAY,GAAG,CAAC,KAAK,IAAI,eAAe,EAAE,CAClE,CACF,CAAC;gBACF,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YACxE,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,uBAAuB,GAAG,qDAAqD;aACzF,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;gBACvC,iBAAiB;YACnB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { CommandContext, CommandResult } from '../types.js';
2
+ /** `org approvals <name> [--all]` — list pending (or all) tool/action approval requests. */
3
+ export declare const approvalsAction: (ctx: CommandContext, name: string) => Promise<CommandResult>;
4
+ /** `org approve <org> <role> <action> [--request <id>] [--by <resolver>]` — approve a pending tool/action approval */
5
+ export declare const approveAction: (ctx: CommandContext, name: string) => Promise<CommandResult>;
6
+ /** `org deny <org> <role> <action> [--request <id>] [--by <resolver>]` — deny a pending tool/action approval */
7
+ export declare const denyAction: (ctx: CommandContext, name: string) => Promise<CommandResult>;
8
+ //# sourceMappingURL=org-observe-approvals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-observe-approvals.d.ts","sourceRoot":"","sources":["../../../src/commands/org-observe-approvals.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAiDjE,4FAA4F;AAC5F,eAAO,MAAM,eAAe,QACrB,cAAc,QACb,MAAM,KACX,OAAO,CAAC,aAAa,CAkDvB,CAAC;AAuIF,sHAAsH;AACtH,eAAO,MAAM,aAAa,QAAe,cAAc,QAAQ,MAAM,KAAG,OAAO,CAAC,aAAa,CAO5F,CAAC;AAEF,gHAAgH;AAChH,eAAO,MAAM,UAAU,QAAe,cAAc,QAAQ,MAAM,KAAG,OAAO,CAAC,aAAa,CAOzF,CAAC"}