@agimon-ai/doompi-git 0.0.1-alpha.3 → 0.0.1-alpha.30

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 (179) hide show
  1. package/README.md +2 -0
  2. package/dist/apiContracts.cjs +149 -0
  3. package/dist/apiContracts.cjs.map +1 -0
  4. package/dist/apiContracts.d.mts +53 -0
  5. package/dist/apiContracts.d.mts.map +1 -0
  6. package/dist/apiContracts.mjs +144 -0
  7. package/dist/apiContracts.mjs.map +1 -0
  8. package/dist/extensions/pi.cjs +109 -1
  9. package/dist/extensions/pi.cjs.map +1 -0
  10. package/dist/extensions/pi.d.mts +6 -2
  11. package/dist/extensions/pi.d.mts.map +1 -0
  12. package/dist/extensions/pi.mjs +104 -1
  13. package/dist/extensions/pi.mjs.map +1 -0
  14. package/dist/extensions/server.cjs +495 -0
  15. package/dist/extensions/server.cjs.map +1 -0
  16. package/dist/extensions/server.d.mts +5 -0
  17. package/dist/extensions/server.d.mts.map +1 -0
  18. package/dist/extensions/server.mjs +490 -0
  19. package/dist/extensions/server.mjs.map +1 -0
  20. package/dist/extensions/web.mjs +580 -0
  21. package/dist/extensions/web.mjs.map +1 -0
  22. package/dist/gitDependencies-D-EUEIkE.mjs +22 -0
  23. package/dist/gitDependencies-D-EUEIkE.mjs.map +1 -0
  24. package/dist/gitDependencies-DKJr5kLQ.cjs +33 -0
  25. package/dist/gitDependencies-DKJr5kLQ.cjs.map +1 -0
  26. package/dist/index-BQq2vblZ.d.mts +143 -0
  27. package/dist/index-BQq2vblZ.d.mts.map +1 -0
  28. package/dist/index.cjs +4 -1
  29. package/dist/index.d.mts +2 -5
  30. package/dist/index.mjs +2 -1
  31. package/dist/runWorktree-B6ikYRrG.cjs +318 -0
  32. package/dist/runWorktree-B6ikYRrG.cjs.map +1 -0
  33. package/dist/runWorktree-BL99h9oH.mjs +289 -0
  34. package/dist/runWorktree-BL99h9oH.mjs.map +1 -0
  35. package/dist/worktreeOperations-DAbs0ZTX.mjs +1054 -0
  36. package/dist/worktreeOperations-DAbs0ZTX.mjs.map +1 -0
  37. package/dist/worktreeOperations-DjO_Y5Yv.cjs +1138 -0
  38. package/dist/worktreeOperations-DjO_Y5Yv.cjs.map +1 -0
  39. package/package.json +53 -39
  40. package/src/prompts/doompi-use-git/SKILL.md +5 -2
  41. package/dist/_virtual/_rolldown/runtime.cjs +0 -1
  42. package/dist/adapters/channel/worktreeChannel.cjs +0 -2
  43. package/dist/adapters/channel/worktreeChannel.cjs.map +0 -1
  44. package/dist/adapters/channel/worktreeChannel.d.cts +0 -40
  45. package/dist/adapters/channel/worktreeChannel.d.cts.map +0 -1
  46. package/dist/adapters/channel/worktreeChannel.d.mts +0 -40
  47. package/dist/adapters/channel/worktreeChannel.d.mts.map +0 -1
  48. package/dist/adapters/channel/worktreeChannel.mjs +0 -2
  49. package/dist/adapters/channel/worktreeChannel.mjs.map +0 -1
  50. package/dist/adapters/filesystem/atomicJson.cjs +0 -2
  51. package/dist/adapters/filesystem/atomicJson.cjs.map +0 -1
  52. package/dist/adapters/filesystem/atomicJson.mjs +0 -2
  53. package/dist/adapters/filesystem/atomicJson.mjs.map +0 -1
  54. package/dist/adapters/filesystem/paths.cjs +0 -2
  55. package/dist/adapters/filesystem/paths.cjs.map +0 -1
  56. package/dist/adapters/filesystem/paths.mjs +0 -2
  57. package/dist/adapters/filesystem/paths.mjs.map +0 -1
  58. package/dist/adapters/hub/hubClient.cjs +0 -2
  59. package/dist/adapters/hub/hubClient.cjs.map +0 -1
  60. package/dist/adapters/hub/hubClient.d.cts +0 -1
  61. package/dist/adapters/hub/hubClient.d.mts +0 -1
  62. package/dist/adapters/hub/hubClient.mjs +0 -2
  63. package/dist/adapters/hub/hubClient.mjs.map +0 -1
  64. package/dist/adapters/pi/extension.cjs +0 -2
  65. package/dist/adapters/pi/extension.cjs.map +0 -1
  66. package/dist/adapters/pi/extension.d.cts +0 -9
  67. package/dist/adapters/pi/extension.d.cts.map +0 -1
  68. package/dist/adapters/pi/extension.d.mts +0 -9
  69. package/dist/adapters/pi/extension.d.mts.map +0 -1
  70. package/dist/adapters/pi/extension.mjs +0 -2
  71. package/dist/adapters/pi/extension.mjs.map +0 -1
  72. package/dist/adapters/pi/extensions/runWorktreeTool.cjs +0 -15
  73. package/dist/adapters/pi/extensions/runWorktreeTool.cjs.map +0 -1
  74. package/dist/adapters/pi/extensions/runWorktreeTool.mjs +0 -15
  75. package/dist/adapters/pi/extensions/runWorktreeTool.mjs.map +0 -1
  76. package/dist/adapters/web/worktreesChannel.cjs +0 -2
  77. package/dist/adapters/web/worktreesChannel.cjs.map +0 -1
  78. package/dist/adapters/web/worktreesChannel.d.cts +0 -21
  79. package/dist/adapters/web/worktreesChannel.d.cts.map +0 -1
  80. package/dist/adapters/web/worktreesChannel.d.mts +0 -21
  81. package/dist/adapters/web/worktreesChannel.d.mts.map +0 -1
  82. package/dist/adapters/web/worktreesChannel.mjs +0 -2
  83. package/dist/adapters/web/worktreesChannel.mjs.map +0 -1
  84. package/dist/adapters/worktree/dependencyInstall.cjs +0 -2
  85. package/dist/adapters/worktree/dependencyInstall.cjs.map +0 -1
  86. package/dist/adapters/worktree/dependencyInstall.mjs +0 -2
  87. package/dist/adapters/worktree/dependencyInstall.mjs.map +0 -1
  88. package/dist/adapters/worktree/gitCli.cjs +0 -4
  89. package/dist/adapters/worktree/gitCli.cjs.map +0 -1
  90. package/dist/adapters/worktree/gitCli.mjs +0 -4
  91. package/dist/adapters/worktree/gitCli.mjs.map +0 -1
  92. package/dist/adapters/worktree/repositoryIdentity.cjs +0 -2
  93. package/dist/adapters/worktree/repositoryIdentity.cjs.map +0 -1
  94. package/dist/adapters/worktree/repositoryIdentity.mjs +0 -2
  95. package/dist/adapters/worktree/repositoryIdentity.mjs.map +0 -1
  96. package/dist/adapters/worktree/worktreeOperations.cjs +0 -2
  97. package/dist/adapters/worktree/worktreeOperations.cjs.map +0 -1
  98. package/dist/adapters/worktree/worktreeOperations.d.cts +0 -32
  99. package/dist/adapters/worktree/worktreeOperations.d.cts.map +0 -1
  100. package/dist/adapters/worktree/worktreeOperations.d.mts +0 -32
  101. package/dist/adapters/worktree/worktreeOperations.d.mts.map +0 -1
  102. package/dist/adapters/worktree/worktreeOperations.mjs +0 -2
  103. package/dist/adapters/worktree/worktreeOperations.mjs.map +0 -1
  104. package/dist/adapters/worktree/worktreeRegistry.cjs +0 -2
  105. package/dist/adapters/worktree/worktreeRegistry.cjs.map +0 -1
  106. package/dist/adapters/worktree/worktreeRegistry.mjs +0 -2
  107. package/dist/adapters/worktree/worktreeRegistry.mjs.map +0 -1
  108. package/dist/commands/doomGitCommand.cjs +0 -2
  109. package/dist/commands/doomGitCommand.cjs.map +0 -1
  110. package/dist/commands/doomGitCommand.mjs +0 -2
  111. package/dist/commands/doomGitCommand.mjs.map +0 -1
  112. package/dist/container/index.cjs +0 -2
  113. package/dist/container/index.cjs.map +0 -1
  114. package/dist/container/index.d.cts +0 -6
  115. package/dist/container/index.d.cts.map +0 -1
  116. package/dist/container/index.d.mts +0 -6
  117. package/dist/container/index.d.mts.map +0 -1
  118. package/dist/container/index.mjs +0 -2
  119. package/dist/container/index.mjs.map +0 -1
  120. package/dist/extensions/pi.d.cts +0 -2
  121. package/dist/hubApi.cjs +0 -2
  122. package/dist/hubApi.cjs.map +0 -1
  123. package/dist/hubApi.d.cts +0 -6
  124. package/dist/hubApi.d.cts.map +0 -1
  125. package/dist/hubApi.d.mts +0 -6
  126. package/dist/hubApi.d.mts.map +0 -1
  127. package/dist/hubApi.mjs +0 -2
  128. package/dist/hubApi.mjs.map +0 -1
  129. package/dist/index.d.cts +0 -5
  130. package/dist/schemas/runWorktreeTool.cjs +0 -2
  131. package/dist/schemas/runWorktreeTool.cjs.map +0 -1
  132. package/dist/schemas/runWorktreeTool.mjs +0 -2
  133. package/dist/schemas/runWorktreeTool.mjs.map +0 -1
  134. package/dist/services/extensionService.cjs +0 -2
  135. package/dist/services/extensionService.cjs.map +0 -1
  136. package/dist/services/extensionService.d.cts +0 -8
  137. package/dist/services/extensionService.d.cts.map +0 -1
  138. package/dist/services/extensionService.d.mts +0 -8
  139. package/dist/services/extensionService.d.mts.map +0 -1
  140. package/dist/services/extensionService.mjs +0 -2
  141. package/dist/services/extensionService.mjs.map +0 -1
  142. package/dist/services/support/errors.cjs +0 -2
  143. package/dist/services/support/errors.cjs.map +0 -1
  144. package/dist/services/support/errors.mjs +0 -2
  145. package/dist/services/support/errors.mjs.map +0 -1
  146. package/dist/services/worktreeNaming.cjs +0 -2
  147. package/dist/services/worktreeNaming.cjs.map +0 -1
  148. package/dist/services/worktreeNaming.d.cts +0 -27
  149. package/dist/services/worktreeNaming.d.cts.map +0 -1
  150. package/dist/services/worktreeNaming.d.mts +0 -27
  151. package/dist/services/worktreeNaming.d.mts.map +0 -1
  152. package/dist/services/worktreeNaming.mjs +0 -2
  153. package/dist/services/worktreeNaming.mjs.map +0 -1
  154. package/dist/types/extension.d.cts +0 -17
  155. package/dist/types/extension.d.cts.map +0 -1
  156. package/dist/types/extension.d.mts +0 -17
  157. package/dist/types/extension.d.mts.map +0 -1
  158. package/dist/types/webWorktrees.cjs +0 -2
  159. package/dist/types/webWorktrees.cjs.map +0 -1
  160. package/dist/types/webWorktrees.mjs +0 -2
  161. package/dist/types/webWorktrees.mjs.map +0 -1
  162. package/dist/types/worktreeRegistry.d.cts +0 -41
  163. package/dist/types/worktreeRegistry.d.cts.map +0 -1
  164. package/dist/types/worktreeRegistry.d.mts +0 -41
  165. package/dist/types/worktreeRegistry.d.mts.map +0 -1
  166. package/dist/webHub.cjs +0 -1
  167. package/dist/webHub.d.cts +0 -2
  168. package/dist/webHub.d.mts +0 -2
  169. package/dist/webHub.mjs +0 -1
  170. package/src/exports/webClient.ts +0 -1
  171. package/src/types/webWorktrees.ts +0 -55
  172. package/src/types/worktreeRegistry.ts +0 -69
  173. package/src/web/components/RunWorktreeToolMessage.tsx +0 -37
  174. package/src/web/components/WorktreesActivitySection.tsx +0 -64
  175. package/src/web/components/WorktreesPanel.tsx +0 -125
  176. package/src/web/components/toolRenderers.ts +0 -7
  177. package/src/web/index.ts +0 -30
  178. package/src/web/stores/worktreesActivityStore.ts +0 -124
  179. package/src/web/tsconfig.json +0 -22
package/README.md CHANGED
@@ -69,3 +69,5 @@ Maintained by [Agimon](https://agimon.ai/about).
69
69
  ## License
70
70
 
71
71
  MIT
72
+
73
+ Named Pi and server factories live in `src/extensions`. Controllers declare commands and APIs; services own worktree operations and filesystem persistence; tools return typed Pi declarations. Public services and types are exposed through flat `src/exports`. In composed DoomPi sessions, the fixed Session foundation durably admits `spawn_worktree.task`, parent messages, and child reports while waking the recipient. The prior in-memory inbox remains only as a standalone compatibility fallback.
@@ -0,0 +1,149 @@
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ let _agimon_ai_doompi_core_apiContracts = require("@agimon-ai/doompi-core/apiContracts");
6
+ let typebox = require("typebox");
7
+ //#region src/schemas/apiContracts.ts
8
+ const S = typebox.Type.String();
9
+ const B = typebox.Type.Boolean();
10
+ const O = typebox.Type.Optional;
11
+ const literals = (values) => typebox.Type.Union(values.map((value) => typebox.Type.Literal(value)));
12
+ const RecordSchema = typebox.Type.Object({
13
+ version: typebox.Type.Literal(1),
14
+ id: S,
15
+ branch: S,
16
+ baseRef: S,
17
+ path: S,
18
+ repositoryRoot: S,
19
+ sessionId: S,
20
+ parentSessionId: S,
21
+ status: literals([
22
+ "spawning",
23
+ "running",
24
+ "closing",
25
+ "orphaned"
26
+ ]),
27
+ createdAt: S
28
+ });
29
+ const ErrorTargetSchema = typebox.Type.Union([typebox.Type.Object({ action: typebox.Type.Literal("create") }), typebox.Type.Object({
30
+ action: typebox.Type.Literal("close"),
31
+ id: S
32
+ })]);
33
+ const WorktreesPayloadSchema = typebox.Type.Object({
34
+ worktrees: typebox.Type.Array(typebox.Type.Object({
35
+ id: S,
36
+ branch: S,
37
+ path: S,
38
+ sessionId: typebox.Type.Union([S, typebox.Type.Null()]),
39
+ orphaned: B,
40
+ unowned: B
41
+ })),
42
+ pending: O(S),
43
+ error: O(S),
44
+ errorTarget: O(ErrorTargetSchema)
45
+ });
46
+ const WorktreesCommandSchema = typebox.Type.Union([typebox.Type.Object({
47
+ action: typebox.Type.Literal("create"),
48
+ branch: S,
49
+ baseRef: O(S),
50
+ reservationId: O(typebox.Type.String({
51
+ minLength: 1,
52
+ pattern: "^[A-Za-z0-9_-]+$"
53
+ }))
54
+ }), typebox.Type.Object({
55
+ action: typebox.Type.Literal("close"),
56
+ id: S,
57
+ force: O(B)
58
+ })]);
59
+ const query = [{
60
+ name: "repositoryId",
61
+ in: "query",
62
+ required: true,
63
+ schema: S
64
+ }, {
65
+ name: "sessionId",
66
+ in: "query",
67
+ required: true,
68
+ schema: S
69
+ }];
70
+ const apiContracts = (0, _agimon_ai_doompi_core_apiContracts.defineApiContract)({
71
+ version: 1,
72
+ dynamic: [],
73
+ http: ["global", "workspace"].flatMap((scope) => [
74
+ {
75
+ id: "git.list",
76
+ scope,
77
+ basePath: "git",
78
+ path: "/worktrees",
79
+ method: "GET",
80
+ authentication: "owner",
81
+ description: "List admitted repository worktrees.",
82
+ parameters: query.map((item) => ({
83
+ ...item,
84
+ required: item.name === "repositoryId"
85
+ })),
86
+ responses: (0, _agimon_ai_doompi_core_apiContracts.jsonApiResponses)(typebox.Type.Object({ worktrees: typebox.Type.Array(RecordSchema) }))
87
+ },
88
+ {
89
+ id: "git.create",
90
+ scope,
91
+ basePath: "git",
92
+ path: "/worktrees",
93
+ method: "POST",
94
+ authentication: "owner",
95
+ description: "Create a worktree and session.",
96
+ parameters: query,
97
+ body: {
98
+ required: true,
99
+ contentType: "application/json",
100
+ schema: typebox.Type.Object({
101
+ branch: typebox.Type.String({ minLength: 1 }),
102
+ baseRef: O(S),
103
+ name: O(S)
104
+ })
105
+ },
106
+ responses: (0, _agimon_ai_doompi_core_apiContracts.jsonApiResponses)(typebox.Type.Object({ worktree: RecordSchema }), 201)
107
+ },
108
+ {
109
+ id: "git.close",
110
+ scope,
111
+ basePath: "git",
112
+ path: "/worktrees/{id}",
113
+ method: "DELETE",
114
+ authentication: "owner",
115
+ description: "Close a worktree.",
116
+ parameters: [...query, {
117
+ name: "force",
118
+ in: "query",
119
+ required: false,
120
+ schema: B
121
+ }],
122
+ responses: (0, _agimon_ai_doompi_core_apiContracts.jsonApiResponses)(typebox.Type.Object({ worktree: RecordSchema }))
123
+ }
124
+ ]),
125
+ sockets: ["global", "workspace"].flatMap((scope) => [{
126
+ id: "git.channel",
127
+ scope,
128
+ service: "doompi.hub.v1",
129
+ member: "git_worktrees",
130
+ kind: "channel",
131
+ direction: "server-to-client",
132
+ description: "Worktree channel payload.",
133
+ input: WorktreesPayloadSchema
134
+ }, {
135
+ id: "git.command",
136
+ scope,
137
+ service: "doompi.hub.v1",
138
+ member: "git_worktrees",
139
+ kind: "channel",
140
+ direction: "client-to-server",
141
+ description: "Worktree channel command payload.",
142
+ input: WorktreesCommandSchema
143
+ }])
144
+ });
145
+ //#endregion
146
+ exports.apiContracts = apiContracts;
147
+ exports.default = apiContracts;
148
+
149
+ //# sourceMappingURL=apiContracts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract","jsonApiResponses"],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/doompi-core/apiContracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nconst literals = <T extends string>(values: T[]) => Type.Union(values.map((value) => Type.Literal(value)));\nconst RecordSchema = Type.Object({\n version: Type.Literal(1),\n id: S,\n branch: S,\n baseRef: S,\n path: S,\n repositoryRoot: S,\n sessionId: S,\n parentSessionId: S,\n status: literals(['spawning', 'running', 'closing', 'orphaned']),\n createdAt: S,\n});\nconst ErrorTargetSchema = Type.Union([\n Type.Object({ action: Type.Literal('create') }),\n Type.Object({ action: Type.Literal('close'), id: S }),\n]);\nexport const WorktreesPayloadSchema = Type.Object({\n worktrees: Type.Array(\n Type.Object({ id: S, branch: S, path: S, sessionId: Type.Union([S, Type.Null()]), orphaned: B, unowned: B }),\n ),\n pending: O(S),\n error: O(S),\n errorTarget: O(ErrorTargetSchema),\n});\nexport const WorktreesCommandSchema = Type.Union([\n Type.Object({\n action: Type.Literal('create'),\n branch: S,\n baseRef: O(S),\n reservationId: O(Type.String({ minLength: 1, pattern: '^[A-Za-z0-9_-]+$' })),\n }),\n Type.Object({ action: Type.Literal('close'), id: S, force: O(B) }),\n]);\nconst query = [\n { name: 'repositoryId', in: 'query' as const, required: true, schema: S },\n { name: 'sessionId', in: 'query' as const, required: true, schema: S },\n];\nexport const apiContracts = defineApiContract({\n version: 1,\n dynamic: [],\n http: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'git.list',\n scope,\n basePath: 'git',\n path: '/worktrees',\n method: 'GET',\n authentication: 'owner',\n description: 'List admitted repository worktrees.',\n parameters: query.map((item) => ({ ...item, required: item.name === 'repositoryId' })),\n responses: jsonApiResponses(Type.Object({ worktrees: Type.Array(RecordSchema) })),\n },\n {\n id: 'git.create',\n scope,\n basePath: 'git',\n path: '/worktrees',\n method: 'POST',\n authentication: 'owner',\n description: 'Create a worktree and session.',\n parameters: query,\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Object({ branch: Type.String({ minLength: 1 }), baseRef: O(S), name: O(S) }),\n },\n responses: jsonApiResponses(Type.Object({ worktree: RecordSchema }), 201),\n },\n {\n id: 'git.close',\n scope,\n basePath: 'git',\n path: '/worktrees/{id}',\n method: 'DELETE',\n authentication: 'owner',\n description: 'Close a worktree.',\n parameters: [...query, { name: 'force', in: 'query', required: false, schema: B }],\n responses: jsonApiResponses(Type.Object({ worktree: RecordSchema })),\n },\n ]),\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'git.channel',\n scope,\n service: 'doompi.hub.v1',\n member: 'git_worktrees',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Worktree channel payload.',\n input: WorktreesPayloadSchema,\n },\n {\n id: 'git.command',\n scope,\n service: 'doompi.hub.v1',\n member: 'git_worktrees',\n kind: 'channel',\n direction: 'client-to-server',\n description: 'Worktree channel command payload.',\n input: WorktreesCommandSchema,\n },\n ]),\n});\nexport default apiContracts;\n"],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { Type } from "typebox";
2
+ //#region src/schemas/apiContracts.d.ts
3
+ export declare const apiContracts: {
4
+ version: 1;
5
+ protocols?: Record<string, string> | undefined;
6
+ schemas?: Record<string, boolean | object> | undefined;
7
+ http: {
8
+ id: string;
9
+ scope: "global" | "session" | "workspace";
10
+ basePath?: string | undefined;
11
+ path: string;
12
+ method: "DELETE" | "GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT";
13
+ description: string;
14
+ availability?: string | undefined;
15
+ authentication: "device" | "none" | "owner";
16
+ parameters?: {
17
+ name: string;
18
+ in: "header" | "path" | "query";
19
+ required: boolean;
20
+ schema: boolean | object;
21
+ }[] | undefined;
22
+ body?: {
23
+ contentType: string;
24
+ contentTypes?: string[] | undefined;
25
+ required: boolean;
26
+ schema: boolean | object;
27
+ } | undefined;
28
+ responses: Record<string, {
29
+ description: string;
30
+ contentType?: string | undefined;
31
+ schema?: boolean | object | undefined;
32
+ events?: Record<string, boolean | object> | undefined;
33
+ }>;
34
+ }[];
35
+ sockets: {
36
+ id: string;
37
+ scope: "global" | "session" | "workspace";
38
+ description: string;
39
+ availability?: string | undefined;
40
+ service: string;
41
+ member: string;
42
+ direction: "client-to-server" | "server-to-client";
43
+ kind: "channel" | "method" | "state";
44
+ input: boolean | object;
45
+ output?: boolean | object | undefined;
46
+ errors?: boolean | object | undefined;
47
+ }[];
48
+ dynamic: string[];
49
+ gaps?: string[] | undefined;
50
+ };
51
+ //#endregion
52
+ export { apiContracts as default };
53
+ //# sourceMappingURL=apiContracts.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../src/schemas/apiContracts.ts"],"mappings":";;qBA4Ca"}
@@ -0,0 +1,144 @@
1
+ import { defineApiContract, jsonApiResponses } from "@agimon-ai/doompi-core/apiContracts";
2
+ import { Type } from "typebox";
3
+ //#region src/schemas/apiContracts.ts
4
+ const S = Type.String();
5
+ const B = Type.Boolean();
6
+ const O = Type.Optional;
7
+ const literals = (values) => Type.Union(values.map((value) => Type.Literal(value)));
8
+ const RecordSchema = Type.Object({
9
+ version: Type.Literal(1),
10
+ id: S,
11
+ branch: S,
12
+ baseRef: S,
13
+ path: S,
14
+ repositoryRoot: S,
15
+ sessionId: S,
16
+ parentSessionId: S,
17
+ status: literals([
18
+ "spawning",
19
+ "running",
20
+ "closing",
21
+ "orphaned"
22
+ ]),
23
+ createdAt: S
24
+ });
25
+ const ErrorTargetSchema = Type.Union([Type.Object({ action: Type.Literal("create") }), Type.Object({
26
+ action: Type.Literal("close"),
27
+ id: S
28
+ })]);
29
+ const WorktreesPayloadSchema = Type.Object({
30
+ worktrees: Type.Array(Type.Object({
31
+ id: S,
32
+ branch: S,
33
+ path: S,
34
+ sessionId: Type.Union([S, Type.Null()]),
35
+ orphaned: B,
36
+ unowned: B
37
+ })),
38
+ pending: O(S),
39
+ error: O(S),
40
+ errorTarget: O(ErrorTargetSchema)
41
+ });
42
+ const WorktreesCommandSchema = Type.Union([Type.Object({
43
+ action: Type.Literal("create"),
44
+ branch: S,
45
+ baseRef: O(S),
46
+ reservationId: O(Type.String({
47
+ minLength: 1,
48
+ pattern: "^[A-Za-z0-9_-]+$"
49
+ }))
50
+ }), Type.Object({
51
+ action: Type.Literal("close"),
52
+ id: S,
53
+ force: O(B)
54
+ })]);
55
+ const query = [{
56
+ name: "repositoryId",
57
+ in: "query",
58
+ required: true,
59
+ schema: S
60
+ }, {
61
+ name: "sessionId",
62
+ in: "query",
63
+ required: true,
64
+ schema: S
65
+ }];
66
+ const apiContracts = defineApiContract({
67
+ version: 1,
68
+ dynamic: [],
69
+ http: ["global", "workspace"].flatMap((scope) => [
70
+ {
71
+ id: "git.list",
72
+ scope,
73
+ basePath: "git",
74
+ path: "/worktrees",
75
+ method: "GET",
76
+ authentication: "owner",
77
+ description: "List admitted repository worktrees.",
78
+ parameters: query.map((item) => ({
79
+ ...item,
80
+ required: item.name === "repositoryId"
81
+ })),
82
+ responses: jsonApiResponses(Type.Object({ worktrees: Type.Array(RecordSchema) }))
83
+ },
84
+ {
85
+ id: "git.create",
86
+ scope,
87
+ basePath: "git",
88
+ path: "/worktrees",
89
+ method: "POST",
90
+ authentication: "owner",
91
+ description: "Create a worktree and session.",
92
+ parameters: query,
93
+ body: {
94
+ required: true,
95
+ contentType: "application/json",
96
+ schema: Type.Object({
97
+ branch: Type.String({ minLength: 1 }),
98
+ baseRef: O(S),
99
+ name: O(S)
100
+ })
101
+ },
102
+ responses: jsonApiResponses(Type.Object({ worktree: RecordSchema }), 201)
103
+ },
104
+ {
105
+ id: "git.close",
106
+ scope,
107
+ basePath: "git",
108
+ path: "/worktrees/{id}",
109
+ method: "DELETE",
110
+ authentication: "owner",
111
+ description: "Close a worktree.",
112
+ parameters: [...query, {
113
+ name: "force",
114
+ in: "query",
115
+ required: false,
116
+ schema: B
117
+ }],
118
+ responses: jsonApiResponses(Type.Object({ worktree: RecordSchema }))
119
+ }
120
+ ]),
121
+ sockets: ["global", "workspace"].flatMap((scope) => [{
122
+ id: "git.channel",
123
+ scope,
124
+ service: "doompi.hub.v1",
125
+ member: "git_worktrees",
126
+ kind: "channel",
127
+ direction: "server-to-client",
128
+ description: "Worktree channel payload.",
129
+ input: WorktreesPayloadSchema
130
+ }, {
131
+ id: "git.command",
132
+ scope,
133
+ service: "doompi.hub.v1",
134
+ member: "git_worktrees",
135
+ kind: "channel",
136
+ direction: "client-to-server",
137
+ description: "Worktree channel command payload.",
138
+ input: WorktreesCommandSchema
139
+ }])
140
+ });
141
+ //#endregion
142
+ export { apiContracts, apiContracts as default };
143
+
144
+ //# sourceMappingURL=apiContracts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/doompi-core/apiContracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst B = Type.Boolean();\nconst O = Type.Optional;\nconst literals = <T extends string>(values: T[]) => Type.Union(values.map((value) => Type.Literal(value)));\nconst RecordSchema = Type.Object({\n version: Type.Literal(1),\n id: S,\n branch: S,\n baseRef: S,\n path: S,\n repositoryRoot: S,\n sessionId: S,\n parentSessionId: S,\n status: literals(['spawning', 'running', 'closing', 'orphaned']),\n createdAt: S,\n});\nconst ErrorTargetSchema = Type.Union([\n Type.Object({ action: Type.Literal('create') }),\n Type.Object({ action: Type.Literal('close'), id: S }),\n]);\nexport const WorktreesPayloadSchema = Type.Object({\n worktrees: Type.Array(\n Type.Object({ id: S, branch: S, path: S, sessionId: Type.Union([S, Type.Null()]), orphaned: B, unowned: B }),\n ),\n pending: O(S),\n error: O(S),\n errorTarget: O(ErrorTargetSchema),\n});\nexport const WorktreesCommandSchema = Type.Union([\n Type.Object({\n action: Type.Literal('create'),\n branch: S,\n baseRef: O(S),\n reservationId: O(Type.String({ minLength: 1, pattern: '^[A-Za-z0-9_-]+$' })),\n }),\n Type.Object({ action: Type.Literal('close'), id: S, force: O(B) }),\n]);\nconst query = [\n { name: 'repositoryId', in: 'query' as const, required: true, schema: S },\n { name: 'sessionId', in: 'query' as const, required: true, schema: S },\n];\nexport const apiContracts = defineApiContract({\n version: 1,\n dynamic: [],\n http: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'git.list',\n scope,\n basePath: 'git',\n path: '/worktrees',\n method: 'GET',\n authentication: 'owner',\n description: 'List admitted repository worktrees.',\n parameters: query.map((item) => ({ ...item, required: item.name === 'repositoryId' })),\n responses: jsonApiResponses(Type.Object({ worktrees: Type.Array(RecordSchema) })),\n },\n {\n id: 'git.create',\n scope,\n basePath: 'git',\n path: '/worktrees',\n method: 'POST',\n authentication: 'owner',\n description: 'Create a worktree and session.',\n parameters: query,\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Object({ branch: Type.String({ minLength: 1 }), baseRef: O(S), name: O(S) }),\n },\n responses: jsonApiResponses(Type.Object({ worktree: RecordSchema }), 201),\n },\n {\n id: 'git.close',\n scope,\n basePath: 'git',\n path: '/worktrees/{id}',\n method: 'DELETE',\n authentication: 'owner',\n description: 'Close a worktree.',\n parameters: [...query, { name: 'force', in: 'query', required: false, schema: B }],\n responses: jsonApiResponses(Type.Object({ worktree: RecordSchema })),\n },\n ]),\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'git.channel',\n scope,\n service: 'doompi.hub.v1',\n member: 'git_worktrees',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Worktree channel payload.',\n input: WorktreesPayloadSchema,\n },\n {\n id: 'git.command',\n scope,\n service: 'doompi.hub.v1',\n member: 'git_worktrees',\n kind: 'channel',\n direction: 'client-to-server',\n description: 'Worktree channel command payload.',\n input: WorktreesCommandSchema,\n },\n ]),\n});\nexport default apiContracts;\n"],"mappings":"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"}
@@ -1 +1,109 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../adapters/pi/extension.cjs");exports.activateGitExtension=e.activateGitExtension,exports.default=e.activateGitExtension;
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ const require_gitDependencies = require("../gitDependencies-DKJr5kLQ.cjs");
6
+ const require_runWorktree = require("../runWorktree-B6ikYRrG.cjs");
7
+ let _agimon_ai_doompi_core_piExtension = require("@agimon-ai/doompi-core/piExtension");
8
+ let _agimon_ai_doompi_core_extensionFile = require("@agimon-ai/doompi-core/extensionFile");
9
+ //#region src/extensions/workspaces/sessions/(backend)/_lib/root.cli.ts
10
+ const root = (0, _agimon_ai_doompi_core_extensionFile.defineRoot)((context) => ({ value: require_gitDependencies.createGitDependencies(context.options) }));
11
+ //#endregion
12
+ //#region src/extensions/workspaces/sessions/(backend)/root.cli.ts
13
+ var root_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineRoot)(root);
14
+ //#endregion
15
+ //#region src/constants/git.ts
16
+ const COMMAND_NAME = "doom-git";
17
+ const COMMAND_DESCRIPTION = "Show git worktrees owned by this session";
18
+ //#endregion
19
+ //#region src/extensions/workspaces/sessions/(backend)/command/_lib/git.cli.ts
20
+ function createGitCommand(service) {
21
+ return [COMMAND_NAME, {
22
+ description: COMMAND_DESCRIPTION,
23
+ handler: async (_args, ctx) => {
24
+ const result = await service.execute();
25
+ if (ctx.hasUI) ctx.ui.notify(result.message, result.level);
26
+ }
27
+ }];
28
+ }
29
+ var git_cli_default$1 = (context) => createGitCommand(context.root.service);
30
+ //#endregion
31
+ //#region src/extensions/workspaces/sessions/(backend)/command/git.cli.ts
32
+ var git_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliCommand)(git_cli_default$1);
33
+ //#endregion
34
+ //#region src/extensions/workspaces/sessions/(backend)/resource/_lib/doompi-use-git.cli.ts
35
+ function createDoompiUseGitResource(moduleUrl) {
36
+ return {
37
+ source: "@agimon-ai/doompi-git",
38
+ moduleUrl,
39
+ skills: [{
40
+ name: "doompi-use-git",
41
+ description: "Use @agimon-ai/doompi-git: Git worktree sessions for DoomPi: spawn an isolated worktree with its own session and manage it from the parent"
42
+ }]
43
+ };
44
+ }
45
+ //#endregion
46
+ //#region src/extensions/workspaces/sessions/(backend)/resource/doompi-use-git.cli.ts
47
+ var doompi_use_git_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineResource)(createDoompiUseGitResource(require("url").pathToFileURL(__filename).href));
48
+ //#endregion
49
+ //#region src/extensions/workspaces/sessions/(backend)/tool/_lib/runWorktree.cli.ts
50
+ var runWorktree_cli_default$1 = (0, _agimon_ai_doompi_core_extensionFile.defineCliTool)((context) => (0, _agimon_ai_doompi_core_piExtension.definePiTool)(createRunWorktreeTool(context.root.operations)));
51
+ /** Creates the typed Pi worktree tool declaration. */
52
+ function createRunWorktreeTool(operations) {
53
+ return {
54
+ name: require_runWorktree.RUN_WORKTREE_TOOL_NAME,
55
+ label: "Worktree",
56
+ description: require_runWorktree.RUN_WORKTREE_DESCRIPTION,
57
+ parameters: require_runWorktree.RunWorktreeToolSchema,
58
+ prepareArguments: require_runWorktree.validateParams,
59
+ execute: async (_id, rawParams, signal, onUpdate, ctx) => {
60
+ const params = require_runWorktree.validateParams(rawParams);
61
+ return await require_runWorktree.executeRunWorktreeTool(params, operations, {
62
+ cwd: ctx.cwd,
63
+ sessionId: ctx.sessionManager.getSessionId()
64
+ }, {
65
+ ...signal === void 0 ? {} : { signal },
66
+ onProgress: (label) => onUpdate?.({
67
+ content: [{
68
+ type: "text",
69
+ text: label
70
+ }],
71
+ details: { action: params.action }
72
+ })
73
+ });
74
+ }
75
+ };
76
+ }
77
+ //#endregion
78
+ //#region src/extensions/workspaces/sessions/(backend)/tool/runWorktree.cli.ts
79
+ var runWorktree_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliTool)(runWorktree_cli_default$1);
80
+ //#endregion
81
+ //#region generated/pi.ts
82
+ const at = (value, context) => typeof value === "function" ? value(context) : value;
83
+ const via = (identity, value) => value === void 0 ? void 0 : {
84
+ ...identity,
85
+ ...value
86
+ };
87
+ const extension = (0, _agimon_ai_doompi_core_piExtension.definePiExtension)("@agimon-ai/doompi-git", async (context) => {
88
+ const scopeSession = await root_cli_default(context);
89
+ const contextSession = {
90
+ ...context,
91
+ root: scopeSession.value
92
+ };
93
+ return {
94
+ ...(0, _agimon_ai_doompi_core_extensionFile.composeRootHooks)(scopeSession),
95
+ get commands() {
96
+ return [at(git_cli_default, contextSession)];
97
+ },
98
+ get resources() {
99
+ return [at(doompi_use_git_cli_default, contextSession)];
100
+ },
101
+ ...(0, _agimon_ai_doompi_core_piExtension.piToolContributions)("@agimon-ai/doompi-git", [via({ name: "run_worktree" }, at(runWorktree_cli_default, contextSession))]),
102
+ services: [...scopeSession.services ?? []]
103
+ };
104
+ });
105
+ //#endregion
106
+ exports.default = extension;
107
+ exports.extension = extension;
108
+
109
+ //# sourceMappingURL=pi.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.cjs","names":["defineRoot","createGitDependencies","defineRoot","contribution","defineCliCommand","contribution","defineResource","defineCliTool","definePiTool","RUN_WORKTREE_TOOL_NAME","RUN_WORKTREE_DESCRIPTION","RunWorktreeToolSchema","validateParams","executeRunWorktreeTool","defineCliTool","contribution","definePiExtension","rootSession","composeRootHooks","commandGit","resourceDoompiUseGit","piToolContributions","toolRunWorktree"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/root.cli.ts","../../src/extensions/workspaces/sessions/(backend)/root.cli.ts","../../src/constants/git.ts","../../src/extensions/workspaces/sessions/(backend)/command/_lib/git.cli.ts","../../src/extensions/workspaces/sessions/(backend)/command/git.cli.ts","../../src/extensions/workspaces/sessions/(backend)/resource/_lib/doompi-use-git.cli.ts","../../src/extensions/workspaces/sessions/(backend)/resource/doompi-use-git.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/_lib/runWorktree.cli.ts","../../src/extensions/workspaces/sessions/(backend)/tool/runWorktree.cli.ts","../../generated/pi.ts"],"sourcesContent":["import { defineRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n\nimport { createGitDependencies } from '../../../../../services/gitDependencies';\nimport type { GitExtensionDependencies } from '../../../../../types/extension';\n\nconst root = defineRoot((context: PiPluginContext<Partial<GitExtensionDependencies>>) => ({\n value: createGitDependencies(context.options),\n}));\n\nexport type GitPiScope = Awaited<ReturnType<typeof root>>['value'];\nexport default root;\n","import { defineRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport contribution from './_lib/root.cli';\n\nexport default defineRoot(contribution);\n","export const COMMAND_NAME = 'doom-git';\nexport const COMMAND_DESCRIPTION = 'Show git worktrees owned by this session';\n","import type { WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\n// @scaffold-generated\nimport type { ExtensionAPI } from '@earendil-works/pi-coding-agent';\n\nimport { COMMAND_NAME, COMMAND_DESCRIPTION } from '../../../../../../constants/git';\nimport type { GitExtensionDependencies, GitExtensionService } from '../../../../../../types/extension';\nimport type { GitPiScope } from '../../_lib/root.cli';\n\nexport function createGitCommand(\n service: GitExtensionService,\n): readonly [string, Parameters<ExtensionAPI['registerCommand']>[1]] {\n return [\n COMMAND_NAME,\n {\n description: COMMAND_DESCRIPTION,\n handler: async (_args, ctx) => {\n const result = await service.execute();\n if (ctx.hasUI) ctx.ui.notify(result.message, result.level);\n },\n },\n ];\n}\n\nexport default (context: WithRoot<PiPluginContext<Partial<GitExtensionDependencies>>, GitPiScope>) =>\n createGitCommand(context.root.service);\n","import { defineCliCommand } from '@agimon-ai/doompi-core/extensionFile';\n\nimport contribution from './_lib/git.cli';\n\nexport default defineCliCommand(contribution);\n","export function createDoompiUseGitResource(moduleUrl: string) {\n return {\n source: '@agimon-ai/doompi-git',\n moduleUrl,\n skills: [\n {\n name: 'doompi-use-git',\n description:\n 'Use @agimon-ai/doompi-git: Git worktree sessions for DoomPi: spawn an isolated worktree with its own session and manage it from the parent',\n },\n ],\n };\n}\n","import { defineResource } from '@agimon-ai/doompi-core/extensionFile';\n\nimport { createDoompiUseGitResource } from './_lib/doompi-use-git.cli';\n\nexport default defineResource(createDoompiUseGitResource(import.meta.url));\n","import { defineCliTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport { definePiTool, type PiPluginContext } from '@agimon-ai/doompi-core/piExtension';\nimport type { AgentToolResult } from '@earendil-works/pi-agent-core';\nimport type { ToolDefinition } from '@earendil-works/pi-coding-agent';\n\nimport { RunWorktreeToolSchema, type RunWorktreeToolParams } from '../../../../../../schemas/runWorktreeTool';\nimport {\n executeRunWorktreeTool,\n RUN_WORKTREE_DESCRIPTION,\n RUN_WORKTREE_TOOL_NAME,\n validateParams,\n type RunWorktreeToolDetails,\n} from '../../../../../../services/runWorktree';\nimport type { WorktreeOperations } from '../../../../../../services/worktreeOperations';\nimport type { GitExtensionDependencies } from '../../../../../../types/extension';\nimport type { GitPiScope } from '../../_lib/root.cli';\n\nexport default defineCliTool((context: WithRoot<PiPluginContext<Partial<GitExtensionDependencies>>, GitPiScope>) =>\n definePiTool(createRunWorktreeTool(context.root.operations)),\n);\n\nexport { RUN_WORKTREE_TOOL_NAME, validateParams };\nexport type { RunWorktreeToolDetails };\n\n/** Creates the typed Pi worktree tool declaration. */\nexport function createRunWorktreeTool(\n operations: WorktreeOperations,\n): ToolDefinition<typeof RunWorktreeToolSchema, RunWorktreeToolDetails> {\n const tool: ToolDefinition<typeof RunWorktreeToolSchema, RunWorktreeToolDetails> = {\n name: RUN_WORKTREE_TOOL_NAME,\n label: 'Worktree',\n description: RUN_WORKTREE_DESCRIPTION,\n parameters: RunWorktreeToolSchema,\n prepareArguments: validateParams,\n // The signal and the progress callback are the host's two answers to a\n // call that takes minutes. Dropping them is what let an interrupted spawn\n // run on with nobody waiting for it, and left the caller staring at\n // nothing while it did.\n execute: async (_id, rawParams, signal, onUpdate, ctx) => {\n const params = validateParams(rawParams) as RunWorktreeToolParams;\n return (await executeRunWorktreeTool(\n params,\n operations,\n {\n cwd: ctx.cwd,\n sessionId: ctx.sessionManager.getSessionId(),\n },\n {\n ...(signal === undefined ? {} : { signal }),\n onProgress: (label) =>\n onUpdate?.({ content: [{ type: 'text', text: label }], details: { action: params.action } }),\n },\n )) as AgentToolResult<RunWorktreeToolDetails>;\n },\n };\n return tool;\n}\n","import { defineCliTool } from '@agimon-ai/doompi-core/extensionFile';\n\nimport contribution from './_lib/runWorktree.cli';\n\nexport default defineCliTool(contribution);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { definePiExtension, piToolContributions, type PiPluginContext, type PiPluginContributions } from '@agimon-ai/doompi-core/piExtension';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.cli';\nimport commandGit from '../src/extensions/workspaces/sessions/(backend)/command/git.cli';\nimport resourceDoompiUseGit from '../src/extensions/workspaces/sessions/(backend)/resource/doompi-use-git.cli';\nimport toolRunWorktree from '../src/extensions/workspaces/sessions/(backend)/tool/runWorktree.cli';\n\ntype OptionsOf<T> = T extends (context: PiPluginContext<infer Options>) => unknown ? Options : never;\ntype InferredOptions = Exclude<OptionsOf<typeof rootSession> | OptionsOf<typeof commandGit> | OptionsOf<typeof resourceDoompiUseGit> | OptionsOf<typeof toolRunWorktree>, undefined>;\ntype Intersect<Union> =\n (Union extends unknown ? (value: Union) => void : never) extends (value: infer Value) => void ? Value : never;\ntype ExtensionOptions = [InferredOptions] extends [never] ? undefined : Intersect<InferredOptions>;\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const extension = definePiExtension<ExtensionOptions>('@agimon-ai/doompi-git', async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get commands(): PiPluginContributions['commands'] { return [at(commandGit, contextSession)]; },\n get resources(): PiPluginContributions['resources'] { return [at(resourceDoompiUseGit, contextSession)]; },\n ...piToolContributions('@agimon-ai/doompi-git', [via({ name: 'run_worktree' }, at(toolRunWorktree, contextSession))]),\n services: [...(scopeSession.services ?? [])],\n };\n});\n\nexport default extension;\n"],"mappings":";;;;;;;;;AAMA,MAAM,QAAA,GAAOA,qCAAAA,WAAAA,EAAY,aAAiE,EACxF,OAAOC,wBAAAA,sBAAsB,QAAQ,OAAO,EAC9C,EAAE;;;ACJF,IAAA,oBAAA,GAAeC,qCAAAA,WAAAA,CAAWC,IAAY;;;ACJtC,MAAa,eAAe;AAC5B,MAAa,sBAAsB;;;ACQnC,SAAgB,iBACd,SACmE;CACnE,OAAO,CACL,cACA;EACE,aAAa;EACb,SAAS,OAAO,OAAO,QAAQ;GAC7B,MAAM,SAAS,MAAM,QAAQ,QAAQ;GACrC,IAAI,IAAI,OAAO,IAAI,GAAG,OAAO,OAAO,SAAS,OAAO,KAAK;EAC3D;CACF,CACF;AACF;AAEA,IAAA,qBAAgB,YACd,iBAAiB,QAAQ,KAAK,OAAO;;;ACrBvC,IAAA,mBAAA,GAAeC,qCAAAA,iBAAAA,CAAiBC,iBAAY;;;ACJ5C,SAAgB,2BAA2B,WAAmB;CAC5D,OAAO;EACL,QAAQ;EACR;EACA,QAAQ,CACN;GACE,MAAM;GACN,aACE;EACJ,CACF;CACF;AACF;;;ACRA,IAAA,8BAAA,GAAeC,qCAAAA,eAAAA,CAAe,2BAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,IAA0C,CAAC;;;ACazE,IAAA,6BAAA,GAAeC,qCAAAA,cAAAA,EAAe,aAAA,GAC5BC,mCAAAA,aAAAA,CAAa,sBAAsB,QAAQ,KAAK,UAAU,CAAC,CAC7D;;AAMA,SAAgB,sBACd,YACsE;CA4BtE,OAAO;EA1BL,MAAMC,oBAAAA;EACN,OAAO;EACP,aAAaC,oBAAAA;EACb,YAAYC,oBAAAA;EACZ,kBAAkBC,oBAAAA;EAKlB,SAAS,OAAO,KAAK,WAAW,QAAQ,UAAU,QAAQ;GACxD,MAAM,SAASA,oBAAAA,eAAe,SAAS;GACvC,OAAQ,MAAMC,oBAAAA,uBACZ,QACA,YACA;IACE,KAAK,IAAI;IACT,WAAW,IAAI,eAAe,aAAa;GAC7C,GACA;IACE,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO;IACzC,aAAa,UACX,WAAW;KAAE,SAAS,CAAC;MAAE,MAAM;MAAQ,MAAM;KAAM,CAAC;KAAG,SAAS,EAAE,QAAQ,OAAO,OAAO;IAAE,CAAC;GAC/F,CACF;EACF;CAEQ;AACZ;;;ACpDA,IAAA,2BAAA,GAAeC,qCAAAA,cAAAA,CAAcC,yBAAY;;;ACYzC,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,aAAA,GAAYC,mCAAAA,kBAAAA,CAAoC,yBAAyB,OAAO,YAAY;CACvG,MAAM,eAAe,MAAMC,iBAAY,OAAO;CAC9C,MAAM,iBAAiB;EAAE,GAAG;EAAS,MAAM,aAAa;CAAM;CAC9D,OAAO;EACL,IAAA,GAAGC,qCAAAA,iBAAAA,CAAiB,YAAY;EAChC,IAAI,WAA8C;GAAE,OAAO,CAAC,GAAGC,iBAAY,cAAc,CAAC;EAAG;EAC7F,IAAI,YAAgD;GAAE,OAAO,CAAC,GAAGC,4BAAsB,cAAc,CAAC;EAAG;EACzG,IAAA,GAAGC,mCAAAA,oBAAAA,CAAoB,yBAAyB,CAAC,IAAI,EAAE,MAAM,eAAe,GAAG,GAAGC,yBAAiB,cAAc,CAAC,CAAC,CAAC;EACpH,UAAU,CAAC,GAAI,aAAa,YAAY,CAAC,CAAE;CAC7C;AACF,CAAC"}
@@ -1,2 +1,6 @@
1
- import { activateGitExtension } from "../adapters/pi/extension.mjs";
2
- export { activateGitExtension, activateGitExtension as default };
1
+ import { r as GitExtensionDependencies } from "../index-BQq2vblZ.mjs";
2
+ //#region generated/pi.d.ts
3
+ export declare const extension: import("@agimon-ai/doompi-core/runtimePiExtension").DefinedPiExtension<Partial<GitExtensionDependencies>>;
4
+ //#endregion
5
+ export { extension as default };
6
+ //# sourceMappingURL=pi.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.mts","names":[],"sources":["../../generated/pi.ts"],"mappings":";;qBAqBa,+DAAS,mBAAA,QAAT"}
@@ -1 +1,104 @@
1
- import{activateGitExtension as e}from"../adapters/pi/extension.mjs";export{e as activateGitExtension,e as default};
1
+ import { t as createGitDependencies } from "../gitDependencies-D-EUEIkE.mjs";
2
+ import { a as RunWorktreeToolSchema, i as validateParams, n as RUN_WORKTREE_TOOL_NAME, r as executeRunWorktreeTool, t as RUN_WORKTREE_DESCRIPTION } from "../runWorktree-BL99h9oH.mjs";
3
+ import { definePiExtension, definePiTool, piToolContributions } from "@agimon-ai/doompi-core/piExtension";
4
+ import { composeRootHooks, defineCliCommand, defineCliTool, defineResource, defineRoot } from "@agimon-ai/doompi-core/extensionFile";
5
+ //#region src/extensions/workspaces/sessions/(backend)/_lib/root.cli.ts
6
+ const root = defineRoot((context) => ({ value: createGitDependencies(context.options) }));
7
+ //#endregion
8
+ //#region src/extensions/workspaces/sessions/(backend)/root.cli.ts
9
+ var root_cli_default = defineRoot(root);
10
+ //#endregion
11
+ //#region src/constants/git.ts
12
+ const COMMAND_NAME = "doom-git";
13
+ const COMMAND_DESCRIPTION = "Show git worktrees owned by this session";
14
+ //#endregion
15
+ //#region src/extensions/workspaces/sessions/(backend)/command/_lib/git.cli.ts
16
+ function createGitCommand(service) {
17
+ return [COMMAND_NAME, {
18
+ description: COMMAND_DESCRIPTION,
19
+ handler: async (_args, ctx) => {
20
+ const result = await service.execute();
21
+ if (ctx.hasUI) ctx.ui.notify(result.message, result.level);
22
+ }
23
+ }];
24
+ }
25
+ var git_cli_default$1 = (context) => createGitCommand(context.root.service);
26
+ //#endregion
27
+ //#region src/extensions/workspaces/sessions/(backend)/command/git.cli.ts
28
+ var git_cli_default = defineCliCommand(git_cli_default$1);
29
+ //#endregion
30
+ //#region src/extensions/workspaces/sessions/(backend)/resource/_lib/doompi-use-git.cli.ts
31
+ function createDoompiUseGitResource(moduleUrl) {
32
+ return {
33
+ source: "@agimon-ai/doompi-git",
34
+ moduleUrl,
35
+ skills: [{
36
+ name: "doompi-use-git",
37
+ description: "Use @agimon-ai/doompi-git: Git worktree sessions for DoomPi: spawn an isolated worktree with its own session and manage it from the parent"
38
+ }]
39
+ };
40
+ }
41
+ //#endregion
42
+ //#region src/extensions/workspaces/sessions/(backend)/resource/doompi-use-git.cli.ts
43
+ var doompi_use_git_cli_default = defineResource(createDoompiUseGitResource(import.meta.url));
44
+ //#endregion
45
+ //#region src/extensions/workspaces/sessions/(backend)/tool/_lib/runWorktree.cli.ts
46
+ var runWorktree_cli_default$1 = defineCliTool((context) => definePiTool(createRunWorktreeTool(context.root.operations)));
47
+ /** Creates the typed Pi worktree tool declaration. */
48
+ function createRunWorktreeTool(operations) {
49
+ return {
50
+ name: RUN_WORKTREE_TOOL_NAME,
51
+ label: "Worktree",
52
+ description: RUN_WORKTREE_DESCRIPTION,
53
+ parameters: RunWorktreeToolSchema,
54
+ prepareArguments: validateParams,
55
+ execute: async (_id, rawParams, signal, onUpdate, ctx) => {
56
+ const params = validateParams(rawParams);
57
+ return await executeRunWorktreeTool(params, operations, {
58
+ cwd: ctx.cwd,
59
+ sessionId: ctx.sessionManager.getSessionId()
60
+ }, {
61
+ ...signal === void 0 ? {} : { signal },
62
+ onProgress: (label) => onUpdate?.({
63
+ content: [{
64
+ type: "text",
65
+ text: label
66
+ }],
67
+ details: { action: params.action }
68
+ })
69
+ });
70
+ }
71
+ };
72
+ }
73
+ //#endregion
74
+ //#region src/extensions/workspaces/sessions/(backend)/tool/runWorktree.cli.ts
75
+ var runWorktree_cli_default = defineCliTool(runWorktree_cli_default$1);
76
+ //#endregion
77
+ //#region generated/pi.ts
78
+ const at = (value, context) => typeof value === "function" ? value(context) : value;
79
+ const via = (identity, value) => value === void 0 ? void 0 : {
80
+ ...identity,
81
+ ...value
82
+ };
83
+ const extension = definePiExtension("@agimon-ai/doompi-git", async (context) => {
84
+ const scopeSession = await root_cli_default(context);
85
+ const contextSession = {
86
+ ...context,
87
+ root: scopeSession.value
88
+ };
89
+ return {
90
+ ...composeRootHooks(scopeSession),
91
+ get commands() {
92
+ return [at(git_cli_default, contextSession)];
93
+ },
94
+ get resources() {
95
+ return [at(doompi_use_git_cli_default, contextSession)];
96
+ },
97
+ ...piToolContributions("@agimon-ai/doompi-git", [via({ name: "run_worktree" }, at(runWorktree_cli_default, contextSession))]),
98
+ services: [...scopeSession.services ?? []]
99
+ };
100
+ });
101
+ //#endregion
102
+ export { extension as default, extension };
103
+
104
+ //# sourceMappingURL=pi.mjs.map