agent-issues 0.0.119

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 (208) hide show
  1. package/.github/agents/agent-issues.agent.md +54 -0
  2. package/.github/agents/agent-issues.claude.md +51 -0
  3. package/dist/agent-installer.d.ts +49 -0
  4. package/dist/agent-installer.js +171 -0
  5. package/dist/agent-installer.js.map +1 -0
  6. package/dist/auth-session.d.ts +40 -0
  7. package/dist/auth-session.js +107 -0
  8. package/dist/auth-session.js.map +1 -0
  9. package/dist/body-backfill.d.ts +26 -0
  10. package/dist/body-backfill.js +219 -0
  11. package/dist/body-backfill.js.map +1 -0
  12. package/dist/build-mode.d.ts +1 -0
  13. package/dist/build-mode.js +1 -0
  14. package/dist/build-mode.js.map +1 -0
  15. package/dist/cli/commands/auth.d.ts +61 -0
  16. package/dist/cli/commands/auth.js +134 -0
  17. package/dist/cli/commands/auth.js.map +1 -0
  18. package/dist/cli/commands/backfill.d.ts +8 -0
  19. package/dist/cli/commands/backfill.js +36 -0
  20. package/dist/cli/commands/backfill.js.map +1 -0
  21. package/dist/cli/commands/comments.d.ts +34 -0
  22. package/dist/cli/commands/comments.js +124 -0
  23. package/dist/cli/commands/comments.js.map +1 -0
  24. package/dist/cli/commands/context.d.ts +13 -0
  25. package/dist/cli/commands/context.js +156 -0
  26. package/dist/cli/commands/context.js.map +1 -0
  27. package/dist/cli/commands/entities.d.ts +91 -0
  28. package/dist/cli/commands/entities.js +420 -0
  29. package/dist/cli/commands/entities.js.map +1 -0
  30. package/dist/cli/commands/export.d.ts +20 -0
  31. package/dist/cli/commands/export.js +98 -0
  32. package/dist/cli/commands/export.js.map +1 -0
  33. package/dist/cli/commands/fallback.d.ts +6 -0
  34. package/dist/cli/commands/fallback.js +10 -0
  35. package/dist/cli/commands/fallback.js.map +1 -0
  36. package/dist/cli/commands/handoff.d.ts +1 -0
  37. package/dist/cli/commands/handoff.js +2 -0
  38. package/dist/cli/commands/handoff.js.map +1 -0
  39. package/dist/cli/commands/installers.d.ts +37 -0
  40. package/dist/cli/commands/installers.js +78 -0
  41. package/dist/cli/commands/installers.js.map +1 -0
  42. package/dist/cli/commands/kanban.d.ts +8 -0
  43. package/dist/cli/commands/kanban.js +83 -0
  44. package/dist/cli/commands/kanban.js.map +1 -0
  45. package/dist/cli/commands/meta.d.ts +14 -0
  46. package/dist/cli/commands/meta.js +33 -0
  47. package/dist/cli/commands/meta.js.map +1 -0
  48. package/dist/cli/commands/plan-entries.d.ts +30 -0
  49. package/dist/cli/commands/plan-entries.js +94 -0
  50. package/dist/cli/commands/plan-entries.js.map +1 -0
  51. package/dist/cli/commands/site.d.ts +29 -0
  52. package/dist/cli/commands/site.js +89 -0
  53. package/dist/cli/commands/site.js.map +1 -0
  54. package/dist/cli/commands/sql.d.ts +6 -0
  55. package/dist/cli/commands/sql.js +21 -0
  56. package/dist/cli/commands/sql.js.map +1 -0
  57. package/dist/cli/commands/synchronize.d.ts +12 -0
  58. package/dist/cli/commands/synchronize.js +31 -0
  59. package/dist/cli/commands/synchronize.js.map +1 -0
  60. package/dist/cli/commands/tenants.d.ts +29 -0
  61. package/dist/cli/commands/tenants.js +101 -0
  62. package/dist/cli/commands/tenants.js.map +1 -0
  63. package/dist/cli/index.d.ts +4 -0
  64. package/dist/cli/index.js +120 -0
  65. package/dist/cli/index.js.map +1 -0
  66. package/dist/cli/renderers.d.ts +250 -0
  67. package/dist/cli/renderers.js +286 -0
  68. package/dist/cli/renderers.js.map +1 -0
  69. package/dist/cli/shared.d.ts +97 -0
  70. package/dist/cli/shared.js +192 -0
  71. package/dist/cli/shared.js.map +1 -0
  72. package/dist/cli.d.ts +11 -0
  73. package/dist/cli.js +41 -0
  74. package/dist/cli.js.map +1 -0
  75. package/dist/context-cli.d.ts +16 -0
  76. package/dist/context-cli.js +131 -0
  77. package/dist/context-cli.js.map +1 -0
  78. package/dist/daemon/daemon-lifecycle.d.ts +1 -0
  79. package/dist/daemon/daemon-lifecycle.js +2 -0
  80. package/dist/daemon/daemon-lifecycle.js.map +1 -0
  81. package/dist/daemon/daemon-main.d.ts +14 -0
  82. package/dist/daemon/daemon-main.js +30 -0
  83. package/dist/daemon/daemon-main.js.map +1 -0
  84. package/dist/daemon/local-daemon-store.d.ts +21 -0
  85. package/dist/daemon/local-daemon-store.js +31 -0
  86. package/dist/daemon/local-daemon-store.js.map +1 -0
  87. package/dist/entity-projection.d.ts +141 -0
  88. package/dist/entity-projection.js +147 -0
  89. package/dist/entity-projection.js.map +1 -0
  90. package/dist/entra-device-login.d.ts +12 -0
  91. package/dist/entra-device-login.js +40 -0
  92. package/dist/entra-device-login.js.map +1 -0
  93. package/dist/export-files.d.ts +24 -0
  94. package/dist/export-files.js +230 -0
  95. package/dist/export-files.js.map +1 -0
  96. package/dist/export-markdown.d.ts +24 -0
  97. package/dist/export-markdown.js +343 -0
  98. package/dist/export-markdown.js.map +1 -0
  99. package/dist/help.d.ts +112 -0
  100. package/dist/help.js +1430 -0
  101. package/dist/help.js.map +1 -0
  102. package/dist/kanban/assets.d.ts +3 -0
  103. package/dist/kanban/assets.js +37 -0
  104. package/dist/kanban/assets.js.map +1 -0
  105. package/dist/kanban/index.d.ts +1 -0
  106. package/dist/kanban/index.js +2 -0
  107. package/dist/kanban/index.js.map +1 -0
  108. package/dist/kanban/server.d.ts +28 -0
  109. package/dist/kanban/server.js +118 -0
  110. package/dist/kanban/server.js.map +1 -0
  111. package/dist/mcp-installer.d.ts +32 -0
  112. package/dist/mcp-installer.js +118 -0
  113. package/dist/mcp-installer.js.map +1 -0
  114. package/dist/mcp-server/index.d.ts +11 -0
  115. package/dist/mcp-server/index.js +504 -0
  116. package/dist/mcp-server/index.js.map +1 -0
  117. package/dist/mcp-server/index.test.d.ts +1 -0
  118. package/dist/mcp-server/index.test.js +746 -0
  119. package/dist/mcp-server/index.test.js.map +1 -0
  120. package/dist/mcp-server/mcp-tool-audit.d.ts +6 -0
  121. package/dist/mcp-server/mcp-tool-audit.js +47 -0
  122. package/dist/mcp-server/mcp-tool-audit.js.map +1 -0
  123. package/dist/mcp-server/stdio.d.ts +2 -0
  124. package/dist/mcp-server/stdio.js +7 -0
  125. package/dist/mcp-server/stdio.js.map +1 -0
  126. package/dist/mcp.d.ts +2 -0
  127. package/dist/mcp.js +19 -0
  128. package/dist/mcp.js.map +1 -0
  129. package/dist/open-storage-driver.d.ts +53 -0
  130. package/dist/open-storage-driver.js +71 -0
  131. package/dist/open-storage-driver.js.map +1 -0
  132. package/dist/open-synchronize-stores.d.ts +24 -0
  133. package/dist/open-synchronize-stores.js +34 -0
  134. package/dist/open-synchronize-stores.js.map +1 -0
  135. package/dist/project-identity.d.ts +23 -0
  136. package/dist/project-identity.js +121 -0
  137. package/dist/project-identity.js.map +1 -0
  138. package/dist/runtime-access-boundary.d.ts +7 -0
  139. package/dist/runtime-access-boundary.js +182 -0
  140. package/dist/runtime-access-boundary.js.map +1 -0
  141. package/dist/service-discovery.d.ts +10 -0
  142. package/dist/service-discovery.js +64 -0
  143. package/dist/service-discovery.js.map +1 -0
  144. package/dist/site/assets.d.ts +4 -0
  145. package/dist/site/assets.js +46 -0
  146. package/dist/site/assets.js.map +1 -0
  147. package/dist/site/cloud-events-relay.d.ts +18 -0
  148. package/dist/site/cloud-events-relay.js +78 -0
  149. package/dist/site/cloud-events-relay.js.map +1 -0
  150. package/dist/site/index.d.ts +1 -0
  151. package/dist/site/index.js +2 -0
  152. package/dist/site/index.js.map +1 -0
  153. package/dist/site/server.d.ts +42 -0
  154. package/dist/site/server.js +320 -0
  155. package/dist/site/server.js.map +1 -0
  156. package/dist/skill-installer.d.ts +35 -0
  157. package/dist/skill-installer.js +174 -0
  158. package/dist/skill-installer.js.map +1 -0
  159. package/dist/vitest-setup.d.ts +1 -0
  160. package/dist/vitest-setup.js +7 -0
  161. package/dist/vitest-setup.js.map +1 -0
  162. package/package.json +42 -0
  163. package/site/dist/assets/index-DKEVC0aQ.css +1 -0
  164. package/site/dist/assets/index-DSR4mIml.js +4396 -0
  165. package/site/dist/index.html +14 -0
  166. package/skills/agent-issues-language.md +5 -0
  167. package/skills/agent-issues-operating-contract.md +208 -0
  168. package/skills/ai-agent-issues/SKILL.md +127 -0
  169. package/skills/ai-domain-modeling/ADR-FORMAT.md +48 -0
  170. package/skills/ai-domain-modeling/CONTEXT-FORMAT.md +54 -0
  171. package/skills/ai-domain-modeling/SKILL.md +45 -0
  172. package/skills/ai-grill-with-docs/SKILL.md +28 -0
  173. package/skills/ai-handoff/SKILL.md +41 -0
  174. package/skills/ai-implement/SKILL.md +98 -0
  175. package/skills/ai-migrate-docs/SKILL.md +65 -0
  176. package/skills/ai-next-work/SKILL.md +43 -0
  177. package/skills/ai-plan/SKILL.md +41 -0
  178. package/skills/ai-prepare/SKILL.md +79 -0
  179. package/skills/ai-prototype/LOGIC.md +67 -0
  180. package/skills/ai-prototype/SKILL.md +31 -0
  181. package/skills/ai-prototype/UI.md +112 -0
  182. package/skills/ai-recipe-migration/SKILL.md +49 -0
  183. package/skills/ai-start-work/SKILL.md +56 -0
  184. package/skills/ai-tdd/SKILL.md +99 -0
  185. package/skills/ai-tdd/deep-modules.md +33 -0
  186. package/skills/ai-tdd/interface-design.md +20 -0
  187. package/skills/ai-tdd/mocking.md +28 -0
  188. package/skills/ai-tdd/refactoring.md +10 -0
  189. package/skills/ai-tdd/tests.md +74 -0
  190. package/skills/ai-to-issues/SKILL.md +70 -0
  191. package/skills/ai-to-prd/SKILL.md +33 -0
  192. package/skills/ai-wayfinder/SKILL.md +110 -0
  193. package/skills/recipes/README.md +29 -0
  194. package/skills/recipes/adr.md +21 -0
  195. package/skills/recipes/context-summary.md +17 -0
  196. package/skills/recipes/context-term.md +3 -0
  197. package/skills/recipes/debt.md +21 -0
  198. package/skills/recipes/epic.md +21 -0
  199. package/skills/recipes/handoff.md +29 -0
  200. package/skills/recipes/initiative.md +21 -0
  201. package/skills/recipes/issue-comment.md +15 -0
  202. package/skills/recipes/issue.md +33 -0
  203. package/skills/recipes/prd.md +29 -0
  204. package/skills/recipes/project.md +21 -0
  205. package/skills/recipes/user-story.md +15 -0
  206. package/skills/recipes/version.md +13 -0
  207. package/skills/recipes/wayfinder-map.md +25 -0
  208. package/skills/recipes/wayfinder-ticket.md +17 -0
package/dist/cli.js ADDED
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ import { realpathSync } from "node:fs";
3
+ import { fileURLToPath } from "node:url";
4
+ import { main, runCli } from "./cli/index.js";
5
+ import { runDaemonProcess } from "./daemon/daemon-main.js";
6
+ import { LOCAL_DAEMON_SPAWN_FLAG } from "./daemon/local-daemon-store.js";
7
+ export { runCli };
8
+ export function isEntrypointInvocation(moduleUrl, argvPath) {
9
+ if (!argvPath) {
10
+ return false;
11
+ }
12
+ return resolveInvocationPath(fileURLToPath(moduleUrl)) === resolveInvocationPath(argvPath);
13
+ }
14
+ function resolveInvocationPath(filePath) {
15
+ try {
16
+ return realpathSync.native(filePath);
17
+ }
18
+ catch {
19
+ return filePath;
20
+ }
21
+ }
22
+ /**
23
+ * A self-respawned local daemon process (ISS190) re-invokes this same entrypoint with a
24
+ * hidden flag as its first argument, instead of a normal command. Recognizing it here lets
25
+ * `spawnLocalDaemon()` in `@agent-issues/core` re-exec whichever script is currently running
26
+ * without needing any knowledge of the CLI's command-dispatch internals.
27
+ */
28
+ export function shouldRunLocalDaemon(args) {
29
+ return args[0] === LOCAL_DAEMON_SPAWN_FLAG;
30
+ }
31
+ if (isEntrypointInvocation(import.meta.url, process.argv[1])) {
32
+ if (shouldRunLocalDaemon(process.argv.slice(2))) {
33
+ runDaemonProcess();
34
+ }
35
+ else {
36
+ void main().then((exitCode) => {
37
+ process.exitCode = exitCode;
38
+ });
39
+ }
40
+ }
41
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,EAA2B,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,MAAM,EAA2B,CAAC;AAE3C,MAAM,UAAU,sBAAsB,CAAC,SAAiB,EAAE,QAA4B;IACrF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO,qBAAqB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC9C,IAAI,CAAC;QACJ,OAAO,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,QAAQ,CAAC;IACjB,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAc;IAClD,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,uBAAuB,CAAC;AAC5C,CAAC;AAED,IAAI,sBAAsB,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,IAAI,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,gBAAgB,EAAE,CAAC;IACpB,CAAC;SAAM,CAAC;QACP,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,CAAC,CAAC,CAAC;IACJ,CAAC;AACF,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ContextDetails, ContextDirectoryTerm, ContextListResult, DefineContextTermResult, ForgetContextTermResult, QueryContextDirectoryResult } from "@agent-issues/api-local";
2
+ export type ContextSearchTermsOnlyResult = {
3
+ query: string;
4
+ view: QueryContextDirectoryResult["view"];
5
+ conflictsOnly: boolean;
6
+ duplicateTerms: string[];
7
+ terms: ContextDirectoryTerm[];
8
+ };
9
+ export declare function toContextSearchTermsOnly(result: QueryContextDirectoryResult): ContextSearchTermsOnlyResult;
10
+ export declare function renderContextDetails(details: ContextDetails): string;
11
+ export declare function renderContextDirectory(directory: QueryContextDirectoryResult): string;
12
+ export declare function renderContextSearchTermsOnly(result: ContextSearchTermsOnlyResult): string;
13
+ export declare function renderContextOutput(details: ContextDetails | QueryContextDirectoryResult): string;
14
+ export declare function renderContextList(result: ContextListResult): string;
15
+ export declare function renderContextTermResult(result: DefineContextTermResult): string;
16
+ export declare function renderContextForgetResult(result: ForgetContextTermResult): string;
@@ -0,0 +1,131 @@
1
+ export function toContextSearchTermsOnly(result) {
2
+ return {
3
+ query: result.query,
4
+ view: result.view,
5
+ conflictsOnly: result.conflictsOnly,
6
+ duplicateTerms: result.duplicateTerms,
7
+ terms: result.terms
8
+ };
9
+ }
10
+ export function renderContextDetails(details) {
11
+ const lines = [
12
+ `${details.context.title} (${details.context.key})`,
13
+ `Scope: ${details.context.scopeKind} ${details.context.scopeEntityId ?? "default"} ${details.context.scopeLabel}`,
14
+ `Stored in database: ${details.context.exists ? "yes" : "not yet initialized"}`,
15
+ `Summary: ${details.context.summary}`,
16
+ `Updated: ${details.context.updatedAt ?? "never"}`,
17
+ "Terms:"
18
+ ];
19
+ if (details.terms.length === 0) {
20
+ lines.push("none");
21
+ return lines.join("\n");
22
+ }
23
+ for (const term of details.terms) {
24
+ lines.push(`- ${term.term}: ${term.definition}`);
25
+ if (term.avoid.length > 0) {
26
+ lines.push(` Avoid: ${term.avoid.join(", ")}`);
27
+ }
28
+ }
29
+ return lines.join("\n");
30
+ }
31
+ export function renderContextDirectory(directory) {
32
+ const sharedTitle = directory.shared?.context.title ?? "Project Context";
33
+ const sharedKey = directory.shared?.context.key ?? "default";
34
+ const lines = [
35
+ `${sharedTitle} (${sharedKey})`,
36
+ "Scope: project directory",
37
+ `View: ${directory.view}`,
38
+ `Query: ${directory.query.length > 0 ? directory.query : "none"}`,
39
+ `Conflicts only: ${directory.conflictsOnly ? "yes" : "no"}`,
40
+ `Shared context stored in database: ${directory.shared?.context.exists ? "yes" : "not matched or not initialized"}`,
41
+ `Shared summary: ${directory.shared?.context.summary && directory.shared.context.summary.length > 0 ? directory.shared.context.summary : "none"}`,
42
+ `Shared terms: ${directory.shared?.terms.length ?? 0}`,
43
+ `Initiative contexts: ${directory.initiatives.length}`,
44
+ `Discovered terms: ${directory.terms.length}`,
45
+ `Duplicate labels across scopes: ${directory.duplicateTerms.length}`
46
+ ];
47
+ if (directory.view !== "global") {
48
+ lines.push("", "Initiative contexts:");
49
+ }
50
+ if (directory.view !== "global" && directory.initiatives.length === 0) {
51
+ lines.push("none");
52
+ }
53
+ else if (directory.view !== "global") {
54
+ for (const details of directory.initiatives) {
55
+ lines.push(`- ${details.context.scopeLabel} (${details.context.key}) ${details.context.exists ? "stored" : "implicit"} terms=${details.terms.length}`);
56
+ if (details.context.summary.length > 0) {
57
+ lines.push(` ${details.context.summary}`);
58
+ }
59
+ }
60
+ }
61
+ lines.push("", "Discovered terms:");
62
+ if (directory.terms.length === 0) {
63
+ lines.push("none");
64
+ return lines.join("\n");
65
+ }
66
+ for (const entry of directory.terms) {
67
+ lines.push(...renderContextTermEntry(entry));
68
+ }
69
+ return lines.join("\n");
70
+ }
71
+ export function renderContextSearchTermsOnly(result) {
72
+ const lines = [
73
+ "Matching context terms",
74
+ `View: ${result.view}`,
75
+ `Query: ${result.query.length > 0 ? result.query : "none"}`,
76
+ `Conflicts only: ${result.conflictsOnly ? "yes" : "no"}`,
77
+ `Matches: ${result.terms.length}`,
78
+ `Duplicate labels across scopes: ${result.duplicateTerms.length}`,
79
+ "",
80
+ "Terms:"
81
+ ];
82
+ if (result.terms.length === 0) {
83
+ lines.push("none");
84
+ return lines.join("\n");
85
+ }
86
+ for (const entry of result.terms) {
87
+ lines.push(...renderContextTermEntry(entry));
88
+ }
89
+ return lines.join("\n");
90
+ }
91
+ export function renderContextOutput(details) {
92
+ return "shared" in details ? renderContextDirectory(details) : renderContextDetails(details);
93
+ }
94
+ export function renderContextList(result) {
95
+ if (result.contexts.length === 0) {
96
+ return "No contexts found.";
97
+ }
98
+ return result.contexts
99
+ .map((item) => `${item.context.key} ${item.context.scopeKind} ${item.context.scopeEntityId ?? "default"} ${item.context.exists ? "stored" : "implicit"} terms=${item.termCount} ${item.context.scopeLabel}\n ${item.context.summary}`)
100
+ .join("\n");
101
+ }
102
+ export function renderContextTermResult(result) {
103
+ return [
104
+ `${result.created ? "Defined" : "Updated"} ${result.term.term} in ${result.context.title} (${result.context.key})`,
105
+ result.term.definition,
106
+ result.term.avoid.length > 0 ? `Avoid: ${result.term.avoid.join(", ")}` : "Avoid: none"
107
+ ].join("\n");
108
+ }
109
+ export function renderContextForgetResult(result) {
110
+ return result.removed
111
+ ? `Removed ${result.term} from ${result.context.title} (${result.context.key})`
112
+ : `Context term not found: ${result.term}`;
113
+ }
114
+ function renderContextTermEntry(entry) {
115
+ const warnings = [];
116
+ if (entry.hasDuplicates) {
117
+ warnings.push(`defined in ${entry.sources.length} scopes`);
118
+ }
119
+ if (entry.hasConflictingDefinitions) {
120
+ warnings.push("conflicting definitions");
121
+ }
122
+ const lines = [`- ${entry.term}${warnings.length > 0 ? ` [${warnings.join("; ")}]` : ""}`];
123
+ for (const source of entry.sources) {
124
+ lines.push(` - ${source.scopeLabel}: ${source.definition}`);
125
+ if (source.avoid.length > 0) {
126
+ lines.push(` Avoid: ${source.avoid.join(", ")}`);
127
+ }
128
+ }
129
+ return lines;
130
+ }
131
+ //# sourceMappingURL=context-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-cli.js","sourceRoot":"","sources":["../src/context-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from "@agent-issues/api-local";
@@ -0,0 +1,2 @@
1
+ export * from "@agent-issues/api-local";
2
+ //# sourceMappingURL=daemon-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-lifecycle.js","sourceRoot":"","sources":["../../src/daemon/daemon-lifecycle.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The real entrypoint a self-respawned daemon process runs (ISS190,
3
+ * ADR44): `spawnLocalDaemon` (`local-daemon-store.ts`) re-invokes this same
4
+ * installed CLI with a hidden flag, and `cli.ts` recognizes that flag and
5
+ * calls this instead of dispatching a normal command. `createLocalDaemonServer`
6
+ * itself lives in `@agent-issues/api-local` - the daemon server implementation,
7
+ * not the CLI's own concern. No `authProvider` override, so the daemon mints
8
+ * and persists its own token (ISS184); no explicit `buildHash`, so it reads
9
+ * its own `dist/build-info.json` (ISS188). The process stays alive because
10
+ * the daemon's own listening HTTP server keeps the event loop open - it only
11
+ * exits via the daemon's own idle-timeout or version/db-path-mismatch
12
+ * drain-then-exit.
13
+ */
14
+ export declare function runDaemonProcess(): void;
@@ -0,0 +1,30 @@
1
+ import { createLocalDaemonServer } from "@agent-issues/api-local";
2
+ /**
3
+ * Parses an optional `--db <path>` out of argv (appended by `spawnLocalDaemon`
4
+ * when a client requested a different db than the currently-running daemon
5
+ * serves, ISS190) so a respawned daemon opens the newly-requested db from its
6
+ * very first request instead of the default.
7
+ */
8
+ function parseDbPathArg(argv) {
9
+ const flagIndex = argv.indexOf("--db");
10
+ if (flagIndex === -1)
11
+ return undefined;
12
+ return argv[flagIndex + 1];
13
+ }
14
+ /**
15
+ * The real entrypoint a self-respawned daemon process runs (ISS190,
16
+ * ADR44): `spawnLocalDaemon` (`local-daemon-store.ts`) re-invokes this same
17
+ * installed CLI with a hidden flag, and `cli.ts` recognizes that flag and
18
+ * calls this instead of dispatching a normal command. `createLocalDaemonServer`
19
+ * itself lives in `@agent-issues/api-local` - the daemon server implementation,
20
+ * not the CLI's own concern. No `authProvider` override, so the daemon mints
21
+ * and persists its own token (ISS184); no explicit `buildHash`, so it reads
22
+ * its own `dist/build-info.json` (ISS188). The process stays alive because
23
+ * the daemon's own listening HTTP server keeps the event loop open - it only
24
+ * exits via the daemon's own idle-timeout or version/db-path-mismatch
25
+ * drain-then-exit.
26
+ */
27
+ export function runDaemonProcess() {
28
+ createLocalDaemonServer({ dbPath: parseDbPathArg(process.argv) });
29
+ }
30
+ //# sourceMappingURL=daemon-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-main.js","sourceRoot":"","sources":["../../src/daemon/daemon-main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE;;;;;GAKG;AACH,SAAS,cAAc,CAAC,IAAc;IACrC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB;IAC/B,uBAAuB,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Hidden argv flag a self-respawned daemon process recognizes (ISS190): the
3
+ * runs the daemon instead of a normal command. Exported so core and the CLI
4
+ * entrypoint agree on the exact same literal without either hardcoding it
5
+ * independently.
6
+ */
7
+ export declare const LOCAL_DAEMON_SPAWN_FLAG = "--agent-issues-run-daemon";
8
+ /**
9
+ * Default `spawn` for the local daemon (ISS190, ADR44): re-invokes this
10
+ * exact running script (`process.argv[1]`) as a detached, unref'd child
11
+ * with the hidden daemon flag appended. Core has no knowledge of which
12
+ * package's entrypoint is actually running - it doesn't need to, since
13
+ * "this same install, running itself again in daemon mode" always resolves
14
+ * correctly regardless of which CLI/site-server process happened to invoke
15
+ * it. When `dbPath` is supplied (a client requesting a different `--db`
16
+ * than the currently-running daemon serves), it's appended so the freshly
17
+ * spawned daemon opens that db instead of the default.
18
+ */
19
+ export declare function spawnLocalDaemon(options?: {
20
+ dbPath?: string;
21
+ }): void;
@@ -0,0 +1,31 @@
1
+ import { spawn as spawnChildProcess } from "node:child_process";
2
+ /**
3
+ * Hidden argv flag a self-respawned daemon process recognizes (ISS190): the
4
+ * runs the daemon instead of a normal command. Exported so core and the CLI
5
+ * entrypoint agree on the exact same literal without either hardcoding it
6
+ * independently.
7
+ */
8
+ export const LOCAL_DAEMON_SPAWN_FLAG = "--agent-issues-run-daemon";
9
+ /**
10
+ * Default `spawn` for the local daemon (ISS190, ADR44): re-invokes this
11
+ * exact running script (`process.argv[1]`) as a detached, unref'd child
12
+ * with the hidden daemon flag appended. Core has no knowledge of which
13
+ * package's entrypoint is actually running - it doesn't need to, since
14
+ * "this same install, running itself again in daemon mode" always resolves
15
+ * correctly regardless of which CLI/site-server process happened to invoke
16
+ * it. When `dbPath` is supplied (a client requesting a different `--db`
17
+ * than the currently-running daemon serves), it's appended so the freshly
18
+ * spawned daemon opens that db instead of the default.
19
+ */
20
+ export function spawnLocalDaemon(options) {
21
+ const entrypoint = process.argv[1];
22
+ if (!entrypoint) {
23
+ throw new Error("Cannot spawn the local daemon: no process entrypoint (process.argv[1]) is available.");
24
+ }
25
+ const args = [entrypoint, LOCAL_DAEMON_SPAWN_FLAG];
26
+ if (options?.dbPath !== undefined) {
27
+ args.push("--db", options.dbPath);
28
+ }
29
+ spawnChildProcess(process.execPath, args, { detached: true, stdio: "ignore" }).unref();
30
+ }
31
+ //# sourceMappingURL=local-daemon-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-daemon-store.js","sourceRoot":"","sources":["../../src/daemon/local-daemon-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AAEnE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA6B;IAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;IACzG,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;IACnD,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AACxF,CAAC"}
@@ -0,0 +1,141 @@
1
+ import type { DeleteResult, EntityDetails, EntityKind, EntityRecord, EntityRelations, EntitySummary, LinkResult, MaterializedContextRevision, MaterializedContextTermRevision, MaterializedEntityRevision, MoveResult, QueryEntityParentGroup, RelationType, StatusUpdateResult, ContextWriteResult, DefineContextTermAcknowledgement, ForgetContextTermResult, UnlinkResult } from "@agent-issues/core";
2
+ export type CompactEntity = {
3
+ id: string;
4
+ reference: string;
5
+ kind: EntityKind;
6
+ status: string;
7
+ title: string;
8
+ };
9
+ export type CompactRelation = {
10
+ type: RelationType;
11
+ entity: CompactEntity;
12
+ };
13
+ export type CompactEntityDetails = {
14
+ entity: CompactEntity;
15
+ incoming: CompactRelation[];
16
+ outgoing: CompactRelation[];
17
+ planEntries: EntityDetails["planEntries"];
18
+ };
19
+ export type CompactEntityList = {
20
+ items: CompactEntity[];
21
+ total: number;
22
+ parentGroups?: Array<{
23
+ parent: CompactEntity;
24
+ items: CompactEntity[];
25
+ }>;
26
+ /** Only present for issue lists; see `QueryEntitiesResult.openBlockers`. */
27
+ openBlockers?: Record<string, string[]>;
28
+ };
29
+ export type CompactNextWorkItem = {
30
+ issue: CompactEntity;
31
+ blockers: string[];
32
+ unblocks: string[];
33
+ };
34
+ export type CompactNextWork = {
35
+ initiative: CompactEntity;
36
+ available: CompactNextWorkItem[];
37
+ blocked: CompactNextWorkItem[];
38
+ };
39
+ export type CompactCreateAcknowledgement = {
40
+ operation: "create";
41
+ id: string;
42
+ reference: string;
43
+ status: string;
44
+ revision: number;
45
+ };
46
+ export type CompactEditAcknowledgement = {
47
+ operation: "edit";
48
+ reference: string;
49
+ revision: number;
50
+ };
51
+ export declare function toCompactEntity(entity: EntitySummary): CompactEntity;
52
+ export declare function toCompactCreateAcknowledgement(entity: EntitySummary): CompactCreateAcknowledgement;
53
+ export declare function toCompactEditAcknowledgement(entity: EntityRecord): CompactEditAcknowledgement;
54
+ export declare function toCompactStatusAcknowledgement(operation: "archive" | "status", result: StatusUpdateResult): {
55
+ operation: "archive" | "status";
56
+ reference: string;
57
+ previousStatus: string;
58
+ status: string;
59
+ revision: number;
60
+ };
61
+ export declare function toCompactDeleteAcknowledgement(result: DeleteResult): {
62
+ operation: "delete";
63
+ reference: string;
64
+ removed: boolean;
65
+ };
66
+ export declare function toCompactMoveAcknowledgement(result: MoveResult): {
67
+ operation: "move";
68
+ reference: string;
69
+ previousParentId: string | null;
70
+ newParentId: string;
71
+ type: "blocks" | "constrains" | "contains" | "creates" | "decomposes" | "fixes" | "handsOff" | "informs" | "owns" | "records" | "relatesTo" | "resolves" | "supersedes" | "taggedWith" | "tracks";
72
+ revision: number;
73
+ };
74
+ export declare function toCompactLinkAcknowledgement(operation: "link" | "unlink", result: LinkResult | UnlinkResult): {
75
+ operation: "link" | "unlink";
76
+ fromId: string;
77
+ toId: string;
78
+ type: "blocks" | "constrains" | "contains" | "creates" | "decomposes" | "fixes" | "handsOff" | "informs" | "owns" | "records" | "relatesTo" | "resolves" | "supersedes" | "taggedWith" | "tracks";
79
+ created: boolean;
80
+ } | {
81
+ operation: "link" | "unlink";
82
+ fromId: string;
83
+ toId: string;
84
+ type: "blocks" | "constrains" | "contains" | "creates" | "decomposes" | "fixes" | "handsOff" | "informs" | "owns" | "records" | "relatesTo" | "resolves" | "supersedes" | "taggedWith" | "tracks";
85
+ removed: boolean;
86
+ };
87
+ export declare function toCompactEntityRestoreAcknowledgement(result: MaterializedEntityRevision): {
88
+ operation: "restore";
89
+ id: string;
90
+ revision: number;
91
+ restoredFromRevision: number | null;
92
+ };
93
+ export declare function toCompactContextSetAcknowledgement(result: ContextWriteResult): {
94
+ operation: "context-set";
95
+ reference: string;
96
+ revision: number;
97
+ };
98
+ export declare function toCompactContextDefineAcknowledgement(result: DefineContextTermAcknowledgement): {
99
+ operation: "context-define";
100
+ reference: string;
101
+ contextReference: string;
102
+ term: string;
103
+ created: boolean;
104
+ revision: number;
105
+ };
106
+ export declare function toCompactContextForgetAcknowledgement(result: ForgetContextTermResult): {
107
+ operation: "context-forget";
108
+ reference: string;
109
+ term: string;
110
+ removed: boolean;
111
+ revision?: number | undefined;
112
+ };
113
+ export declare function toCompactContextRestoreAcknowledgement(result: MaterializedContextRevision): {
114
+ operation: "context-restore";
115
+ contextKey: string;
116
+ revision: number;
117
+ restoredFromRevision: number | null;
118
+ };
119
+ export declare function toCompactContextTermRestoreAcknowledgement(result: MaterializedContextTermRevision): {
120
+ operation: "context-term-restore";
121
+ id: string;
122
+ contextKey: string;
123
+ term: string;
124
+ revision: number;
125
+ restoredFromRevision: number | null;
126
+ };
127
+ export declare function toCompactEntityDetails(details: EntityDetails | EntityRelations): CompactEntityDetails;
128
+ export declare function toCompactEntityList(entities: EntitySummary[], total?: number, openBlockers?: Record<string, string[]>, parentGroups?: QueryEntityParentGroup[]): CompactEntityList;
129
+ export declare function toCompactNextWork(result: {
130
+ initiative: EntityRecord;
131
+ available: Array<{
132
+ issue: EntityRecord;
133
+ blockers: string[];
134
+ unblocks: string[];
135
+ }>;
136
+ blocked: Array<{
137
+ issue: EntityRecord;
138
+ blockers: string[];
139
+ unblocks: string[];
140
+ }>;
141
+ }): CompactNextWork;
@@ -0,0 +1,147 @@
1
+ export function toCompactEntity(entity) {
2
+ return {
3
+ id: entity.id,
4
+ reference: entity.reference,
5
+ kind: entity.kind,
6
+ status: entity.status,
7
+ title: entity.title
8
+ };
9
+ }
10
+ export function toCompactCreateAcknowledgement(entity) {
11
+ return {
12
+ operation: "create",
13
+ id: entity.id,
14
+ reference: entity.reference,
15
+ status: entity.status,
16
+ revision: entity.revision
17
+ };
18
+ }
19
+ export function toCompactEditAcknowledgement(entity) {
20
+ return {
21
+ operation: "edit",
22
+ reference: entity.reference,
23
+ revision: entity.revision
24
+ };
25
+ }
26
+ export function toCompactStatusAcknowledgement(operation, result) {
27
+ return {
28
+ operation,
29
+ reference: result.entity.reference,
30
+ previousStatus: result.previousStatus,
31
+ status: result.entity.status,
32
+ revision: result.entity.revision
33
+ };
34
+ }
35
+ export function toCompactDeleteAcknowledgement(result) {
36
+ return {
37
+ operation: "delete",
38
+ reference: result.entity.reference,
39
+ removed: result.removed
40
+ };
41
+ }
42
+ export function toCompactMoveAcknowledgement(result) {
43
+ return {
44
+ operation: "move",
45
+ reference: result.entity.reference,
46
+ previousParentId: result.previousParentId,
47
+ newParentId: result.newParentId,
48
+ type: result.relationType,
49
+ revision: result.entity.revision
50
+ };
51
+ }
52
+ export function toCompactLinkAcknowledgement(operation, result) {
53
+ return {
54
+ operation,
55
+ fromId: result.relation.fromId,
56
+ toId: result.relation.toId,
57
+ type: result.relation.type,
58
+ ...(operation === "link" ? { created: result.created } : { removed: result.removed })
59
+ };
60
+ }
61
+ export function toCompactEntityRestoreAcknowledgement(result) {
62
+ return {
63
+ operation: "restore",
64
+ id: result.entityId,
65
+ revision: result.headRevision,
66
+ restoredFromRevision: result.restoredFromRevision
67
+ };
68
+ }
69
+ export function toCompactContextSetAcknowledgement(result) {
70
+ return {
71
+ operation: "context-set",
72
+ reference: result.context.reference ?? result.context.key,
73
+ revision: result.context.revision
74
+ };
75
+ }
76
+ export function toCompactContextDefineAcknowledgement(result) {
77
+ return {
78
+ operation: "context-define",
79
+ reference: result.term.reference,
80
+ contextReference: result.context.reference ?? result.context.key,
81
+ term: result.term.term,
82
+ created: result.created,
83
+ revision: result.term.revision
84
+ };
85
+ }
86
+ export function toCompactContextForgetAcknowledgement(result) {
87
+ return {
88
+ operation: "context-forget",
89
+ reference: result.context.reference ?? result.context.key,
90
+ term: result.term,
91
+ removed: result.removed,
92
+ ...(result.currentRevision === undefined ? {} : { revision: result.currentRevision })
93
+ };
94
+ }
95
+ export function toCompactContextRestoreAcknowledgement(result) {
96
+ return {
97
+ operation: "context-restore",
98
+ contextKey: result.contextKey,
99
+ revision: result.headRevision,
100
+ restoredFromRevision: result.restoredFromRevision
101
+ };
102
+ }
103
+ export function toCompactContextTermRestoreAcknowledgement(result) {
104
+ return {
105
+ operation: "context-term-restore",
106
+ id: result.id,
107
+ contextKey: result.contextKey,
108
+ term: result.term,
109
+ revision: result.headRevision,
110
+ restoredFromRevision: result.restoredFromRevision
111
+ };
112
+ }
113
+ export function toCompactEntityDetails(details) {
114
+ return {
115
+ entity: toCompactEntity(details.entity),
116
+ incoming: details.incoming.map(({ relationType, entity }) => ({
117
+ type: relationType,
118
+ entity: toCompactEntity(entity)
119
+ })),
120
+ outgoing: details.outgoing.map(({ relationType, entity }) => ({
121
+ type: relationType,
122
+ entity: toCompactEntity(entity)
123
+ })),
124
+ planEntries: details.planEntries ?? []
125
+ };
126
+ }
127
+ export function toCompactEntityList(entities, total = entities.length, openBlockers, parentGroups) {
128
+ return {
129
+ items: entities.map(toCompactEntity),
130
+ total,
131
+ ...(parentGroups ? { parentGroups: parentGroups.map((group) => ({ parent: toCompactEntity(group.parent), items: group.entities.map(toCompactEntity) })) } : {}),
132
+ ...(openBlockers ? { openBlockers } : {})
133
+ };
134
+ }
135
+ export function toCompactNextWork(result) {
136
+ const toCompactNextWorkItem = (item) => ({
137
+ issue: toCompactEntity(item.issue),
138
+ blockers: item.blockers,
139
+ unblocks: item.unblocks
140
+ });
141
+ return {
142
+ initiative: toCompactEntity(result.initiative),
143
+ available: result.available.map(toCompactNextWorkItem),
144
+ blocked: result.blocked.map(toCompactNextWorkItem)
145
+ };
146
+ }
147
+ //# sourceMappingURL=entity-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-projection.js","sourceRoot":"","sources":["../src/entity-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { DeviceCodeLoginFn } from "./cli/commands/auth.js";
2
+ /**
3
+ * Real Entra ID device-code login (ADR12's client-side leg). This is the
4
+ * genuine HITL boundary for ISS32: it requires a human to open the printed
5
+ * verification URL in a browser and enter the device code against a real
6
+ * Azure app registration. Not unit-tested for that reason - see
7
+ * docs/auth-entra-id-setup.md for how to obtain the tenant/client IDs this
8
+ * needs, and `agent-issues auth login --help` for usage. Remote-login tests
9
+ * cover everything downstream of this exchange with a fake implementation
10
+ * of `DeviceCodeLoginFn`.
11
+ */
12
+ export declare const acquireEntraDeviceCodeSession: DeviceCodeLoginFn;