agent-issues 0.0.121 → 0.0.127

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 (166) hide show
  1. package/dist/build-info.json +3 -0
  2. package/dist/cli.js +97746 -26
  3. package/kanban/dist/assets/index-CIAg6qj5.css +1 -0
  4. package/kanban/dist/assets/index-DaYQjJS7.js +920 -0
  5. package/kanban/dist/index.html +13 -0
  6. package/package.json +12 -11
  7. package/site/dist/assets/{index-Cx-fLU3e.js → index-BRvRYF7I.js} +195 -146
  8. package/site/dist/index.html +1 -1
  9. package/dist/agent-installer.d.ts +0 -49
  10. package/dist/agent-installer.js +0 -171
  11. package/dist/agent-installer.js.map +0 -1
  12. package/dist/auth-session.d.ts +0 -40
  13. package/dist/auth-session.js +0 -107
  14. package/dist/auth-session.js.map +0 -1
  15. package/dist/body-backfill.d.ts +0 -26
  16. package/dist/body-backfill.js +0 -219
  17. package/dist/body-backfill.js.map +0 -1
  18. package/dist/build-mode.d.ts +0 -1
  19. package/dist/build-mode.js +0 -1
  20. package/dist/build-mode.js.map +0 -1
  21. package/dist/cli/commands/auth.d.ts +0 -61
  22. package/dist/cli/commands/auth.js +0 -134
  23. package/dist/cli/commands/auth.js.map +0 -1
  24. package/dist/cli/commands/backfill.d.ts +0 -8
  25. package/dist/cli/commands/backfill.js +0 -36
  26. package/dist/cli/commands/backfill.js.map +0 -1
  27. package/dist/cli/commands/comments.d.ts +0 -34
  28. package/dist/cli/commands/comments.js +0 -124
  29. package/dist/cli/commands/comments.js.map +0 -1
  30. package/dist/cli/commands/context.d.ts +0 -13
  31. package/dist/cli/commands/context.js +0 -156
  32. package/dist/cli/commands/context.js.map +0 -1
  33. package/dist/cli/commands/entities.d.ts +0 -91
  34. package/dist/cli/commands/entities.js +0 -420
  35. package/dist/cli/commands/entities.js.map +0 -1
  36. package/dist/cli/commands/export.d.ts +0 -20
  37. package/dist/cli/commands/export.js +0 -98
  38. package/dist/cli/commands/export.js.map +0 -1
  39. package/dist/cli/commands/fallback.d.ts +0 -6
  40. package/dist/cli/commands/fallback.js +0 -10
  41. package/dist/cli/commands/fallback.js.map +0 -1
  42. package/dist/cli/commands/handoff.d.ts +0 -1
  43. package/dist/cli/commands/handoff.js +0 -2
  44. package/dist/cli/commands/handoff.js.map +0 -1
  45. package/dist/cli/commands/installers.d.ts +0 -37
  46. package/dist/cli/commands/installers.js +0 -78
  47. package/dist/cli/commands/installers.js.map +0 -1
  48. package/dist/cli/commands/kanban.d.ts +0 -8
  49. package/dist/cli/commands/kanban.js +0 -83
  50. package/dist/cli/commands/kanban.js.map +0 -1
  51. package/dist/cli/commands/meta.d.ts +0 -14
  52. package/dist/cli/commands/meta.js +0 -33
  53. package/dist/cli/commands/meta.js.map +0 -1
  54. package/dist/cli/commands/plan-entries.d.ts +0 -30
  55. package/dist/cli/commands/plan-entries.js +0 -94
  56. package/dist/cli/commands/plan-entries.js.map +0 -1
  57. package/dist/cli/commands/site.d.ts +0 -29
  58. package/dist/cli/commands/site.js +0 -89
  59. package/dist/cli/commands/site.js.map +0 -1
  60. package/dist/cli/commands/sql.d.ts +0 -6
  61. package/dist/cli/commands/sql.js +0 -21
  62. package/dist/cli/commands/sql.js.map +0 -1
  63. package/dist/cli/commands/synchronize.d.ts +0 -12
  64. package/dist/cli/commands/synchronize.js +0 -31
  65. package/dist/cli/commands/synchronize.js.map +0 -1
  66. package/dist/cli/commands/tenants.d.ts +0 -29
  67. package/dist/cli/commands/tenants.js +0 -101
  68. package/dist/cli/commands/tenants.js.map +0 -1
  69. package/dist/cli/index.d.ts +0 -4
  70. package/dist/cli/index.js +0 -120
  71. package/dist/cli/index.js.map +0 -1
  72. package/dist/cli/renderers.d.ts +0 -250
  73. package/dist/cli/renderers.js +0 -286
  74. package/dist/cli/renderers.js.map +0 -1
  75. package/dist/cli/shared.d.ts +0 -97
  76. package/dist/cli/shared.js +0 -192
  77. package/dist/cli/shared.js.map +0 -1
  78. package/dist/cli.d.ts +0 -11
  79. package/dist/cli.js.map +0 -1
  80. package/dist/context-cli.d.ts +0 -16
  81. package/dist/context-cli.js +0 -131
  82. package/dist/context-cli.js.map +0 -1
  83. package/dist/daemon/daemon-lifecycle.d.ts +0 -1
  84. package/dist/daemon/daemon-lifecycle.js +0 -2
  85. package/dist/daemon/daemon-lifecycle.js.map +0 -1
  86. package/dist/daemon/daemon-main.d.ts +0 -14
  87. package/dist/daemon/daemon-main.js +0 -30
  88. package/dist/daemon/daemon-main.js.map +0 -1
  89. package/dist/daemon/local-daemon-store.d.ts +0 -21
  90. package/dist/daemon/local-daemon-store.js +0 -31
  91. package/dist/daemon/local-daemon-store.js.map +0 -1
  92. package/dist/entity-projection.d.ts +0 -141
  93. package/dist/entity-projection.js +0 -147
  94. package/dist/entity-projection.js.map +0 -1
  95. package/dist/entra-device-login.d.ts +0 -12
  96. package/dist/entra-device-login.js +0 -40
  97. package/dist/entra-device-login.js.map +0 -1
  98. package/dist/export-files.d.ts +0 -24
  99. package/dist/export-files.js +0 -230
  100. package/dist/export-files.js.map +0 -1
  101. package/dist/export-markdown.d.ts +0 -24
  102. package/dist/export-markdown.js +0 -343
  103. package/dist/export-markdown.js.map +0 -1
  104. package/dist/help.d.ts +0 -112
  105. package/dist/help.js +0 -1430
  106. package/dist/help.js.map +0 -1
  107. package/dist/kanban/assets.d.ts +0 -3
  108. package/dist/kanban/assets.js +0 -37
  109. package/dist/kanban/assets.js.map +0 -1
  110. package/dist/kanban/index.d.ts +0 -1
  111. package/dist/kanban/index.js +0 -2
  112. package/dist/kanban/index.js.map +0 -1
  113. package/dist/kanban/server.d.ts +0 -28
  114. package/dist/kanban/server.js +0 -118
  115. package/dist/kanban/server.js.map +0 -1
  116. package/dist/mcp-installer.d.ts +0 -32
  117. package/dist/mcp-installer.js +0 -118
  118. package/dist/mcp-installer.js.map +0 -1
  119. package/dist/mcp-server/index.d.ts +0 -11
  120. package/dist/mcp-server/index.js +0 -504
  121. package/dist/mcp-server/index.js.map +0 -1
  122. package/dist/mcp-server/index.test.d.ts +0 -1
  123. package/dist/mcp-server/index.test.js +0 -746
  124. package/dist/mcp-server/index.test.js.map +0 -1
  125. package/dist/mcp-server/mcp-tool-audit.d.ts +0 -6
  126. package/dist/mcp-server/mcp-tool-audit.js +0 -47
  127. package/dist/mcp-server/mcp-tool-audit.js.map +0 -1
  128. package/dist/mcp-server/stdio.d.ts +0 -2
  129. package/dist/mcp-server/stdio.js +0 -7
  130. package/dist/mcp-server/stdio.js.map +0 -1
  131. package/dist/mcp.d.ts +0 -2
  132. package/dist/mcp.js +0 -19
  133. package/dist/mcp.js.map +0 -1
  134. package/dist/open-storage-driver.d.ts +0 -55
  135. package/dist/open-storage-driver.js +0 -73
  136. package/dist/open-storage-driver.js.map +0 -1
  137. package/dist/open-synchronize-stores.d.ts +0 -24
  138. package/dist/open-synchronize-stores.js +0 -34
  139. package/dist/open-synchronize-stores.js.map +0 -1
  140. package/dist/project-identity.d.ts +0 -23
  141. package/dist/project-identity.js +0 -121
  142. package/dist/project-identity.js.map +0 -1
  143. package/dist/runtime-access-boundary.d.ts +0 -7
  144. package/dist/runtime-access-boundary.js +0 -182
  145. package/dist/runtime-access-boundary.js.map +0 -1
  146. package/dist/service-discovery.d.ts +0 -10
  147. package/dist/service-discovery.js +0 -64
  148. package/dist/service-discovery.js.map +0 -1
  149. package/dist/site/assets.d.ts +0 -4
  150. package/dist/site/assets.js +0 -46
  151. package/dist/site/assets.js.map +0 -1
  152. package/dist/site/cloud-events-relay.d.ts +0 -16
  153. package/dist/site/cloud-events-relay.js +0 -78
  154. package/dist/site/cloud-events-relay.js.map +0 -1
  155. package/dist/site/index.d.ts +0 -1
  156. package/dist/site/index.js +0 -2
  157. package/dist/site/index.js.map +0 -1
  158. package/dist/site/server.d.ts +0 -42
  159. package/dist/site/server.js +0 -632
  160. package/dist/site/server.js.map +0 -1
  161. package/dist/skill-installer.d.ts +0 -35
  162. package/dist/skill-installer.js +0 -180
  163. package/dist/skill-installer.js.map +0 -1
  164. package/dist/vitest-setup.d.ts +0 -1
  165. package/dist/vitest-setup.js +0 -7
  166. package/dist/vitest-setup.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-mode.js","sourceRoot":"","sources":["../src/build-mode.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAiC,aAAa,CAAC"}
@@ -1,61 +0,0 @@
1
- import { type SavedLoginStoreOptions, type RemoteSavedLogin } from "../../auth-session.js";
2
- import { BaseCommand } from "../shared.js";
3
- export type DeviceCodeLoginResult = {
4
- tenantId: string;
5
- userId: string;
6
- displayName?: string;
7
- accessToken: string;
8
- expiresAt: string;
9
- };
10
- /** Reports the human-readable device-code instructions Entra returns (e.g. "go to microsoft.com/devicelogin and enter code ABCD-EFGH"). */
11
- export type DeviceCodePrompt = (message: string) => void;
12
- /**
13
- * Runs the interactive Entra ID device-code exchange and resolves the
14
- * identity + token it produced. The real implementation
15
- * (`../../entra-device-login.js`) is the genuine HITL gap this repo cannot
16
- * exercise: it requires a human to complete a device-code login in a
17
- * browser against a real Azure tenant (ISS32's acceptance criteria).
18
- */
19
- export type DeviceCodeLoginFn = (options: {
20
- tenantId: string;
21
- clientId: string;
22
- onDeviceCode: DeviceCodePrompt;
23
- }) => Promise<DeviceCodeLoginResult>;
24
- export type RemoteLoginDependencies = {
25
- deviceCodeLogin: DeviceCodeLoginFn;
26
- fetch?: typeof globalThis.fetch;
27
- onDeviceCode: DeviceCodePrompt;
28
- storeOptions?: SavedLoginStoreOptions;
29
- };
30
- export declare function performRemoteLogin(input: {
31
- name: string;
32
- serviceUrl: string;
33
- }, dependencies: RemoteLoginDependencies): Promise<RemoteSavedLogin>;
34
- export declare class AuthLoginCommand extends BaseCommand {
35
- static paths: string[][];
36
- name: string | undefined;
37
- serviceUrl: string | undefined;
38
- execute(): Promise<number>;
39
- private loginRemote;
40
- private resolveRemoteInput;
41
- private prompt;
42
- }
43
- export declare class AuthListCommand extends BaseCommand {
44
- static paths: string[][];
45
- execute(): Promise<number>;
46
- }
47
- export declare class AuthLogoutCommand extends BaseCommand {
48
- static paths: string[][];
49
- positionals: string[];
50
- execute(): Promise<number>;
51
- }
52
- export declare class AuthStatusCommand extends BaseCommand {
53
- static paths: string[][];
54
- execute(): Promise<number>;
55
- }
56
- export declare class AuthSwitchCommand extends BaseCommand {
57
- static paths: string[][];
58
- positionals: string[];
59
- execute(): Promise<number>;
60
- private getNextSavedLoginName;
61
- }
@@ -1,134 +0,0 @@
1
- import { createInterface } from "node:readline/promises";
2
- import { Option } from "clipanion";
3
- import { getActiveSavedLogin, listSavedLogins, removeSavedLogin, saveSavedLogin, setActiveSavedLogin, toSavedLoginView } from "../../auth-session.js";
4
- import { discoverServiceAuth } from "../../service-discovery.js";
5
- import { renderAuthList, renderAuthLogin, renderAuthLogout, renderAuthStatus, renderAuthSwitch } from "../renderers.js";
6
- import { BaseCommand } from "../shared.js";
7
- export async function performRemoteLogin(input, dependencies) {
8
- if (input.name === "local") {
9
- throw new Error('Saved-login name "local" is reserved.');
10
- }
11
- const discovered = await discoverServiceAuth(input.serviceUrl, dependencies.fetch);
12
- const result = await dependencies.deviceCodeLogin({
13
- tenantId: discovered.auth.tenantId,
14
- clientId: discovered.auth.clientId,
15
- onDeviceCode: dependencies.onDeviceCode
16
- });
17
- const login = {
18
- name: input.name,
19
- kind: "remote",
20
- serviceUrl: discovered.serviceUrl,
21
- tenantId: result.tenantId,
22
- userId: result.userId,
23
- displayName: result.displayName,
24
- accessToken: result.accessToken,
25
- expiresAt: result.expiresAt
26
- };
27
- await saveSavedLogin(login, dependencies.storeOptions);
28
- return login;
29
- }
30
- export class AuthLoginCommand extends BaseCommand {
31
- static paths = [["auth", "login"]];
32
- name = Option.String("--name");
33
- serviceUrl = Option.String("--url");
34
- async execute() {
35
- const login = await this.loginRemote();
36
- const view = toSavedLoginView(login);
37
- this.print({ command: "auth-login", login: view }, renderAuthLogin(view));
38
- return 0;
39
- }
40
- async loginRemote() {
41
- const { name, serviceUrl } = await this.resolveRemoteInput();
42
- const dependencies = this.context.authLoginDependencies;
43
- const deviceCodeLogin = dependencies?.deviceCodeLogin
44
- ?? (await import("../../entra-device-login.js")).acquireEntraDeviceCodeSession;
45
- return performRemoteLogin({ name, serviceUrl }, {
46
- deviceCodeLogin,
47
- fetch: dependencies?.fetch,
48
- onDeviceCode: (message) => this.context.stdout.write(`${message}\n`),
49
- storeOptions: this.context.credentialStoreOptions
50
- });
51
- }
52
- async resolveRemoteInput() {
53
- let name = this.name?.trim();
54
- let serviceUrl = this.serviceUrl?.trim();
55
- if (this.asJson) {
56
- if (!name)
57
- throw new Error("`auth login --json` requires --name <name>.");
58
- if (!serviceUrl)
59
- throw new Error("`auth login --json` requires --url <url>.");
60
- return { name, serviceUrl };
61
- }
62
- const dependencies = this.context.authLoginDependencies;
63
- const interactive = dependencies?.interactive ?? (process.stdin.isTTY === true && process.stdout.isTTY === true);
64
- if ((!name || !serviceUrl) && !interactive) {
65
- throw new Error("`auth login` requires --name <name> and --url <url> outside an interactive terminal.");
66
- }
67
- const prompt = dependencies?.prompt ?? ((question) => this.prompt(question));
68
- name ||= (await prompt("Saved login name: ")).trim();
69
- serviceUrl ||= (await prompt("Service URL: ")).trim();
70
- if (!name)
71
- throw new Error("Saved-login name cannot be empty.");
72
- if (!serviceUrl)
73
- throw new Error("Service URL cannot be empty.");
74
- return { name, serviceUrl };
75
- }
76
- async prompt(question) {
77
- const readline = createInterface({ input: process.stdin, output: this.context.stdout, terminal: true });
78
- try {
79
- return await readline.question(question);
80
- }
81
- finally {
82
- readline.close();
83
- }
84
- }
85
- }
86
- export class AuthListCommand extends BaseCommand {
87
- static paths = [["auth", "list"]];
88
- async execute() {
89
- const logins = await listSavedLogins(this.context.credentialStoreOptions);
90
- const active = await getActiveSavedLogin(this.context.credentialStoreOptions);
91
- const views = logins.map((login) => ({ login: toSavedLoginView(login), active: login.name === active.name }));
92
- this.print({ command: "auth-list", logins: views }, renderAuthList(views));
93
- return 0;
94
- }
95
- }
96
- export class AuthLogoutCommand extends BaseCommand {
97
- static paths = [["auth", "logout"]];
98
- positionals = Option.Rest();
99
- async execute() {
100
- const active = await getActiveSavedLogin(this.context.credentialStoreOptions);
101
- const name = this.positionals[0] ?? active.name;
102
- await removeSavedLogin(name, this.context.credentialStoreOptions);
103
- this.print({ command: "auth-logout", name }, renderAuthLogout(name));
104
- return 0;
105
- }
106
- }
107
- export class AuthStatusCommand extends BaseCommand {
108
- static paths = [["auth", "status"]];
109
- async execute() {
110
- const login = await getActiveSavedLogin(this.context.credentialStoreOptions);
111
- const view = toSavedLoginView(login);
112
- this.print({ command: "auth-status", login: view }, renderAuthStatus(view));
113
- return 0;
114
- }
115
- }
116
- export class AuthSwitchCommand extends BaseCommand {
117
- static paths = [["auth", "switch"]];
118
- positionals = Option.Rest();
119
- async execute() {
120
- const name = this.positionals[0] ?? (await this.getNextSavedLoginName());
121
- await setActiveSavedLogin(name, this.context.credentialStoreOptions);
122
- const login = await getActiveSavedLogin(this.context.credentialStoreOptions);
123
- const view = toSavedLoginView(login);
124
- this.print({ command: "auth-switch", login: view }, renderAuthSwitch(view));
125
- return 0;
126
- }
127
- async getNextSavedLoginName() {
128
- const logins = await listSavedLogins(this.context.credentialStoreOptions);
129
- const active = await getActiveSavedLogin(this.context.credentialStoreOptions);
130
- const activeIndex = logins.findIndex(({ name }) => name === active.name);
131
- return logins[(activeIndex + 1) % logins.length].name;
132
- }
133
- }
134
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { MutableTenantCommand } from "../shared.js";
2
- export declare class BackfillBodiesCommand extends MutableTenantCommand {
3
- static paths: string[][];
4
- allTenants: boolean;
5
- dryRun: boolean;
6
- kinds: string | undefined;
7
- execute(): Promise<number>;
8
- }
@@ -1,36 +0,0 @@
1
- import { Option } from "clipanion";
2
- import { backfillBodies, parseBackfillableBodyKinds } from "@agent-issues/core";
3
- import { renderBackfillBodies } from "../renderers.js";
4
- import { MutableTenantCommand, parseCsvOption, withStore } from "../shared.js";
5
- export class BackfillBodiesCommand extends MutableTenantCommand {
6
- static paths = [["backfill-bodies"]];
7
- allTenants = Option.Boolean("--all-tenants", false);
8
- dryRun = Option.Boolean("--dry-run", false);
9
- kinds = Option.String("--kinds");
10
- async execute() {
11
- return withStore(this.dbPath, this.withStoreOptions(), async (store, dbPath) => {
12
- const kinds = parseBackfillableBodyKinds(parseCsvOption(this.kinds));
13
- const tenantIds = this.allTenants ? (await store.listTenants()).map((tenant) => tenant.id) : [store.tenantId];
14
- const tenants = [];
15
- for (const tenantId of tenantIds) {
16
- if (tenantId === store.tenantId) {
17
- tenants.push(await backfillBodies(store, { dryRun: this.dryRun, force: this.force, kinds }));
18
- continue;
19
- }
20
- tenants.push(await withStore(this.dbPath, this.withStoreOptions({ tenant: tenantId }), (tenantStore) => backfillBodies(tenantStore, { dryRun: this.dryRun, force: this.force, kinds })));
21
- }
22
- const result = {
23
- command: "backfill-bodies",
24
- dbPath,
25
- dryRun: this.dryRun,
26
- force: this.force,
27
- kinds,
28
- scope: this.allTenants ? "all-tenants" : "current-tenant",
29
- tenants
30
- };
31
- this.print(result, renderBackfillBodies(result));
32
- return 0;
33
- });
34
- }
35
- }
36
- //# sourceMappingURL=backfill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"backfill.js","sourceRoot":"","sources":["../../../src/cli/commands/backfill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/E,MAAM,OAAO,qBAAsB,SAAQ,oBAAoB;IACvD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAErC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC5C,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEjC,KAAK,CAAC,OAAO;QACnB,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC9E,MAAM,KAAK,GAAG,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAE9G,MAAM,OAAO,GAAG,EAAE,CAAC;YACnB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAClC,IAAI,QAAQ,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACjC,OAAO,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC7F,SAAS;gBACV,CAAC;gBAED,OAAO,CAAC,IAAI,CACX,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CACzF,cAAc,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAC9E,CACD,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG;gBACd,OAAO,EAAE,iBAA0B;gBACnC,MAAM;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK;gBACL,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,aAAuB,CAAC,CAAC,CAAE,gBAA0B;gBAC/E,OAAO;aACP,CAAC;YAEF,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"}
@@ -1,34 +0,0 @@
1
- import { BaseCommand, BodyTenantCommand, TenantCommand } from "../shared.js";
2
- export declare class IssueCommentCommand extends BaseCommand {
3
- static paths: string[][];
4
- execute(): Promise<number>;
5
- }
6
- export declare class AddIssueCommentCommand extends BodyTenantCommand {
7
- static paths: string[][];
8
- positionals: string[];
9
- references: string[] | undefined;
10
- execute(): Promise<number>;
11
- }
12
- export declare class EditIssueCommentCommand extends BodyTenantCommand {
13
- static paths: string[][];
14
- positionals: string[];
15
- references: string[] | undefined;
16
- execute(): Promise<number>;
17
- }
18
- export declare class DeleteIssueCommentCommand extends TenantCommand {
19
- static paths: string[][];
20
- positionals: string[];
21
- execute(): Promise<number>;
22
- }
23
- export declare class IssueCommentHistoryCommand extends TenantCommand {
24
- static paths: string[][];
25
- positionals: string[];
26
- execute(): Promise<number>;
27
- }
28
- export declare class ListIssueCommentsCommand extends TenantCommand {
29
- static paths: string[][];
30
- all: boolean;
31
- before: string | undefined;
32
- positionals: string[];
33
- execute(): Promise<number>;
34
- }
@@ -1,124 +0,0 @@
1
- import { Option } from "clipanion";
2
- import { getHelpPayload, renderHelp } from "../../help.js";
3
- import { BaseCommand, BodyTenantCommand, TenantCommand, requireOption, requirePositional, withStore } from "../shared.js";
4
- export class IssueCommentCommand extends BaseCommand {
5
- static paths = [["comment"]];
6
- async execute() {
7
- const payload = getHelpPayload("comment");
8
- this.print(payload, renderHelp(payload));
9
- return 0;
10
- }
11
- }
12
- export class AddIssueCommentCommand extends BodyTenantCommand {
13
- static paths = [["comment", "add"]];
14
- positionals = Option.Rest();
15
- references = Option.Array("--reference");
16
- async execute() {
17
- return withStore(this.dbPath, this.withStoreOptions(), async (store) => {
18
- const referencedIssueIds = await resolveReferencedIssueIds(store, this.references ?? []);
19
- const comment = await store.createIssueComment({
20
- issueId: requirePositional(this.positionals, 0, "comment add <issueId> --body-file <path|-> [--reference <issueId>]"),
21
- body: requireOption(await this.resolveBody(), "--body-file is required for comment add."),
22
- referencedIssueIds
23
- });
24
- this.print(comment, renderIssueComment(comment));
25
- return 0;
26
- });
27
- }
28
- }
29
- export class EditIssueCommentCommand extends BodyTenantCommand {
30
- static paths = [["comment", "edit"]];
31
- positionals = Option.Rest();
32
- references = Option.Array("--reference");
33
- async execute() {
34
- return withStore(this.dbPath, this.withStoreOptions(), async (store) => {
35
- const issueId = requirePositional(this.positionals, 0, "comment edit <issueId> <commentId> --body-file <path|-> [--reference <issueId>]");
36
- const commentId = requirePositional(this.positionals, 1, "comment edit <issueId> <commentId> --body-file <path|-> [--reference <issueId>]");
37
- const comment = await getIssueComment(store, issueId, commentId);
38
- const referencedIssueIds = this.references === undefined
39
- ? undefined
40
- : await resolveReferencedIssueIds(store, this.references);
41
- const updated = await store.updateIssueComment({
42
- commentId,
43
- body: requireOption(await this.resolveBody(), "--body-file is required for comment edit."),
44
- referencedIssueIds,
45
- expectedRevision: comment.revision,
46
- expectedContentHash: comment.contentHash
47
- });
48
- this.print(updated, renderIssueComment(updated));
49
- return 0;
50
- });
51
- }
52
- }
53
- export class DeleteIssueCommentCommand extends TenantCommand {
54
- static paths = [["comment", "delete"]];
55
- positionals = Option.Rest();
56
- async execute() {
57
- return withStore(this.dbPath, this.withStoreOptions(), async (store) => {
58
- const issueId = requirePositional(this.positionals, 0, "comment delete <issueId> <commentId>");
59
- const commentId = requirePositional(this.positionals, 1, "comment delete <issueId> <commentId>");
60
- const comment = await getIssueComment(store, issueId, commentId);
61
- const deleted = await store.deleteIssueComment({
62
- commentId,
63
- expectedRevision: comment.revision,
64
- expectedContentHash: comment.contentHash
65
- });
66
- this.print(deleted, renderIssueComment(deleted));
67
- return 0;
68
- });
69
- }
70
- }
71
- export class IssueCommentHistoryCommand extends TenantCommand {
72
- static paths = [["comment", "history"]];
73
- positionals = Option.Rest();
74
- async execute() {
75
- return withStore(this.dbPath, this.withStoreOptions(), async (store) => {
76
- const history = await store.listIssueCommentHistory({
77
- commentId: requirePositional(this.positionals, 0, "comment history <commentId>")
78
- });
79
- this.print(history, history.map(renderIssueCommentHistory).join("\n") || "No comment history found.");
80
- return 0;
81
- });
82
- }
83
- }
84
- export class ListIssueCommentsCommand extends TenantCommand {
85
- static paths = [["comment", "list"]];
86
- all = Option.Boolean("--all", false);
87
- before = Option.String("--before");
88
- positionals = Option.Rest();
89
- async execute() {
90
- return withStore(this.dbPath, this.withStoreOptions(), async (store) => {
91
- const page = await store.listIssueComments({
92
- issueId: requirePositional(this.positionals, 0, "comment list <issueId> [--before <cursor>] [--all]"),
93
- before: this.before,
94
- all: this.all
95
- });
96
- this.print(page, page.comments.map(renderIssueComment).join("\n") || "No comments found.");
97
- return 0;
98
- });
99
- }
100
- }
101
- function renderIssueComment(comment) {
102
- if (comment.tombstone) {
103
- return `${comment.reference} deleted ${comment.updatedAt}`;
104
- }
105
- return `${comment.reference} by ${comment.createdBy}\n${comment.body}`;
106
- }
107
- function renderIssueCommentHistory(entry) {
108
- return `revision ${entry.targetRevision}/${entry.headRevision} by ${entry.author} ${entry.createdAt}${entry.tombstone ? " deleted" : ""}\n${entry.body}`;
109
- }
110
- async function getIssueComment(store, issueId, commentId) {
111
- const issue = await store.getEntityDetails(issueId);
112
- const comment = (await store.listIssueComments({ issueId: issue.entity.id, all: true })).comments
113
- .find((candidate) => candidate.id === commentId || candidate.reference === commentId);
114
- if (!comment) {
115
- throw new Error(`Issue comment not found: ${commentId}`);
116
- }
117
- return comment;
118
- }
119
- async function resolveReferencedIssueIds(store, references) {
120
- return await Promise.all(references.map(async (reference) => {
121
- return (await store.getEntityDetails(reference)).entity.id;
122
- }));
123
- }
124
- //# sourceMappingURL=comments.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../../src/cli/commands/comments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1H,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAC5C,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7B,KAAK,CAAC,OAAO;QACnB,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC;IACV,CAAC;CACD;AAED,MAAM,OAAO,sBAAuB,SAAQ,iBAAiB;IACrD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpC,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAEzC,KAAK,CAAC,OAAO;QACnB,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACtE,MAAM,kBAAkB,GAAG,MAAM,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YACzF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC;gBAC9C,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,oEAAoE,CAAC;gBACrH,IAAI,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,0CAA0C,CAAC;gBACzF,kBAAkB;aAClB,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACJ,CAAC;CACD;AAED,MAAM,OAAO,uBAAwB,SAAQ,iBAAiB;IACtD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAErC,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAEzC,KAAK,CAAC,OAAO;QACnB,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACtE,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,iFAAiF,CAAC,CAAC;YAC1I,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,iFAAiF,CAAC,CAAC;YAC5I,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACjE,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,KAAK,SAAS;gBACvD,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,MAAM,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC;gBAC9C,SAAS;gBACT,IAAI,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,2CAA2C,CAAC;gBAC1F,kBAAkB;gBAClB,gBAAgB,EAAE,OAAO,CAAC,QAAQ;gBAClC,mBAAmB,EAAE,OAAO,CAAC,WAAW;aACxC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACJ,CAAC;CACD;AAED,MAAM,OAAO,yBAA0B,SAAQ,aAAa;IACpD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvC,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAE5B,KAAK,CAAC,OAAO;QACnB,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACtE,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,sCAAsC,CAAC,CAAC;YAC/F,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,sCAAsC,CAAC,CAAC;YACjG,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC;gBAC9C,SAAS;gBACT,gBAAgB,EAAE,OAAO,CAAC,QAAQ;gBAClC,mBAAmB,EAAE,OAAO,CAAC,WAAW;aACxC,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACJ,CAAC;CACD;AAED,MAAM,OAAO,0BAA2B,SAAQ,aAAa;IACrD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAExC,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAE5B,KAAK,CAAC,OAAO;QACnB,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACtE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,uBAAuB,CAAC;gBACnD,SAAS,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,6BAA6B,CAAC;aAChF,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,CAAC;YACtG,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACJ,CAAC;CACD;AAED,MAAM,OAAO,wBAAyB,SAAQ,aAAa;IACnD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAErC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnC,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAE5B,KAAK,CAAC,OAAO;QACnB,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACtE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC;gBAC1C,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,oDAAoD,CAAC;gBACrG,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;aACb,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;YAC3F,OAAO,CAAC,CAAC;QACV,CAAC,CAAC,CAAC;IACJ,CAAC;CACD;AAED,SAAS,kBAAkB,CAAC,OAM3B;IACA,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,OAAO,GAAG,OAAO,CAAC,SAAS,YAAY,OAAO,CAAC,SAAS,EAAE,CAAC;IAC5D,CAAC;IAED,OAAO,GAAG,OAAO,CAAC,SAAS,OAAO,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,yBAAyB,CAAC,KAOlC;IACA,OAAO,YAAY,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,YAAY,OAAO,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;AAC1J,CAAC;AAED,KAAK,UAAU,eAAe,CAC7B,KAGC,EACD,OAAe,EACf,SAAiB;IAEjB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ;SAC/F,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IACvF,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,yBAAyB,CACvC,KAAkF,EAClF,UAAoB;IAEpB,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QAC3D,OAAO,CAAC,MAAM,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,13 +0,0 @@
1
- import { TenantCommand } from "../shared.js";
2
- export declare class ContextCommand extends TenantCommand {
3
- static paths: string[][];
4
- avoid: string | undefined;
5
- bodyFile: string | undefined;
6
- positionals: string[];
7
- query: string | undefined;
8
- scope: string | undefined;
9
- termsOnly: boolean;
10
- title: string | undefined;
11
- view: string | undefined;
12
- execute(): Promise<number>;
13
- }
@@ -1,156 +0,0 @@
1
- import { Option } from "clipanion";
2
- import { ContextTermConflictError } from "@agent-issues/core";
3
- import { renderContextDetails, renderContextForgetResult, renderContextList, renderContextOutput, renderContextSearchTermsOnly, renderContextTermResult, toContextSearchTermsOnly } from "../../context-cli.js";
4
- import { toCompactContextDefineAcknowledgement, toCompactContextForgetAcknowledgement, toCompactContextSetAcknowledgement } from "../../entity-projection.js";
5
- import { CONTEXT_SUBCOMMANDS, TenantCommand, parseContextView, parseCsvOption, parseEntityView, requireOption, requirePositional, resolveMarkdownFileOption, withStore } from "../shared.js";
6
- export class ContextCommand extends TenantCommand {
7
- static paths = [["context"]];
8
- avoid = Option.String("--avoid");
9
- bodyFile = Option.String("--body-file");
10
- positionals = Option.Rest();
11
- query = Option.String("--query");
12
- scope = Option.String("--scope");
13
- termsOnly = Option.Boolean("--terms-only", false);
14
- title = Option.String("--title");
15
- view = Option.String("--view");
16
- async execute() {
17
- const firstPositional = this.positionals[0];
18
- const subcommand = !firstPositional || CONTEXT_SUBCOMMANDS.has(firstPositional) ? firstPositional ?? "show" : "show";
19
- const isMutation = subcommand === "set" || subcommand === "define" || subcommand === "forget";
20
- if (!isMutation && (this.view === "compact" || this.view === "full")) {
21
- throw new Error(`--view ${this.view} is only valid for context set, define, and forget.`);
22
- }
23
- const mutationView = isMutation
24
- ? parseEntityView(this.view)
25
- : undefined;
26
- const contextView = mutationView === undefined ? parseContextView(this.view) : "all";
27
- return withStore(this.dbPath, this.withStoreOptions(), async (store) => {
28
- const showScopeRef = subcommand === "show"
29
- ? this.scope ?? (firstPositional && !CONTEXT_SUBCOMMANDS.has(firstPositional) ? firstPositional : this.positionals[1])
30
- : this.scope;
31
- if (subcommand === "list") {
32
- const result = await store.listContexts();
33
- this.print(result, renderContextList(result));
34
- return 0;
35
- }
36
- if (subcommand === "show") {
37
- if (showScopeRef && (this.query || contextView !== "all")) {
38
- throw new Error("`context show <scope>` does not support --query or --view. Use `context search` for filtered project-wide discovery.");
39
- }
40
- const context = showScopeRef
41
- ? await store.getContextDetails({ scopeRef: showScopeRef })
42
- : await store.queryContextDirectory({ query: this.query, view: contextView });
43
- this.print(context, renderContextOutput(context));
44
- return 0;
45
- }
46
- if (subcommand === "search") {
47
- const query = this.query ?? this.positionals[1];
48
- if (!query) {
49
- throw new Error("Missing argument. Usage: context search <query> [--view <all|global|initiatives>]");
50
- }
51
- const result = await store.queryContextDirectory({ query, view: contextView });
52
- if (this.termsOnly) {
53
- const compactResult = toContextSearchTermsOnly(result);
54
- this.print(compactResult, renderContextSearchTermsOnly(compactResult));
55
- return 0;
56
- }
57
- this.print(result, renderContextOutput(result));
58
- return 0;
59
- }
60
- if (this.termsOnly) {
61
- throw new Error("`--terms-only` is only supported for `context search`.");
62
- }
63
- if (subcommand === "conflicts") {
64
- if (contextView === "global") {
65
- throw new Error("`context conflicts` does not support --view global because shared-only context cannot conflict across scopes.");
66
- }
67
- const result = await store.queryContextDirectory({
68
- conflictsOnly: true,
69
- query: this.query ?? this.positionals[1],
70
- view: contextView
71
- });
72
- this.print(result, renderContextOutput(result));
73
- return 0;
74
- }
75
- if (subcommand === "set") {
76
- const current = await store.getContextDetails({ scopeRef: this.scope });
77
- const result = await store.upsertContext({
78
- scopeRef: this.scope,
79
- title: requireOption(this.title, "--title is required for context set."),
80
- summary: requireOption(await resolveMarkdownFileOption(this.bodyFile, "--body-file"), "--body-file is required for context set."),
81
- ...(current.context.exists && {
82
- expectedRevision: current.context.revision,
83
- expectedContentHash: current.context.contentHash
84
- })
85
- });
86
- const details = await store.getContextDetails({ scopeRef: this.scope });
87
- this.print(this.asJson && mutationView === "compact" ? toCompactContextSetAcknowledgement(result) : details, renderContextDetails(details));
88
- return 0;
89
- }
90
- if (subcommand === "define") {
91
- const term = requirePositional(this.positionals, 1, "context define <term> --body-file <path|-> [--avoid <comma-separated terms>]");
92
- const current = (await store.getContextDetails({ scopeRef: this.scope })).terms.find((candidate) => candidate.term === term);
93
- const input = {
94
- scopeRef: this.scope,
95
- term,
96
- definition: requireOption(await resolveMarkdownFileOption(this.bodyFile, "--body-file"), "--body-file is required for context define."),
97
- avoid: parseCsvOption(this.avoid),
98
- ...(current && { expectedRevision: current.revision, expectedContentHash: current.contentHash })
99
- };
100
- let result;
101
- try {
102
- result = await store.defineContextTerm(input);
103
- }
104
- catch (error) {
105
- if (!(error instanceof ContextTermConflictError) || current) {
106
- throw error;
107
- }
108
- const activeAfterConflict = (await store.getContextDetails({ scopeRef: this.scope })).terms.some((candidate) => candidate.term === term);
109
- if (activeAfterConflict) {
110
- throw error;
111
- }
112
- result = await store.defineContextTerm({
113
- ...input,
114
- expectedRevision: error.currentRevision,
115
- expectedContentHash: error.currentContentHash
116
- });
117
- }
118
- const details = await store.getContextDetails({ scopeRef: this.scope });
119
- const storedTerm = details.terms.find((candidate) => candidate.id === result.term.id);
120
- if (!storedTerm) {
121
- throw new Error(`Context term not found after definition: ${result.term.id}`);
122
- }
123
- const fullResult = { context: details.context, term: storedTerm, created: result.created };
124
- this.print(this.asJson && mutationView === "compact" ? toCompactContextDefineAcknowledgement(result) : fullResult, renderContextTermResult(fullResult));
125
- return 0;
126
- }
127
- if (subcommand === "forget") {
128
- const term = requirePositional(this.positionals, 1, "context forget <term>");
129
- const current = (await store.getContextDetails({ scopeRef: this.scope })).terms.find((candidate) => candidate.term === term);
130
- const input = {
131
- scopeRef: this.scope,
132
- term,
133
- ...(current && { expectedRevision: current.revision, expectedContentHash: current.contentHash })
134
- };
135
- let result;
136
- try {
137
- result = await store.forgetContextTerm(input);
138
- }
139
- catch (error) {
140
- if (!(error instanceof ContextTermConflictError) || current) {
141
- throw error;
142
- }
143
- result = await store.forgetContextTerm({
144
- ...input,
145
- expectedRevision: error.currentRevision,
146
- expectedContentHash: error.currentContentHash
147
- });
148
- }
149
- this.print(this.asJson && mutationView === "compact" ? toCompactContextForgetAcknowledgement(result) : result, renderContextForgetResult(result));
150
- return 0;
151
- }
152
- throw new Error(`Unknown context subcommand: ${subcommand}`);
153
- });
154
- }
155
- }
156
- //# sourceMappingURL=context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/cli/commands/context.ts"],"names":[],"mappings":"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"}