@agimon-ai/po-git 0.0.0-alpha.2 → 0.0.0-alpha.21
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.
- package/LICENSE +149 -21
- package/README.md +2 -2
- package/dist/apiContracts.cjs +4 -4
- package/dist/apiContracts.cjs.map +1 -1
- package/dist/apiContracts.mjs +4 -4
- package/dist/apiContracts.mjs.map +1 -1
- package/dist/extensions/server.cjs +31 -28
- package/dist/extensions/server.cjs.map +1 -1
- package/dist/extensions/server.d.mts +2 -2
- package/dist/extensions/server.d.mts.map +1 -1
- package/dist/extensions/server.mjs +29 -26
- package/dist/extensions/server.mjs.map +1 -1
- package/dist/extensions/web.mjs +112 -112
- package/dist/extensions/web.mjs.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{worktreeOperations-CaqwGsD_.mjs → worktreeOperations-Cd8Q12L4.mjs} +50 -51
- package/dist/worktreeOperations-Cd8Q12L4.mjs.map +1 -0
- package/dist/{worktreeOperations-MgIVDDu3.cjs → worktreeOperations-Dxs3txKL.cjs} +61 -62
- package/dist/worktreeOperations-Dxs3txKL.cjs.map +1 -0
- package/package.json +20 -20
- package/dist/worktreeOperations-CaqwGsD_.mjs.map +0 -1
- package/dist/worktreeOperations-MgIVDDu3.cjs.map +0 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,149 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
License text copyright © 2017 MariaDB Corporation Ab, All Rights Reserved.
|
|
2
|
+
"Business Source License" is a trademark of MariaDB Corporation Ab.
|
|
3
|
+
|
|
4
|
+
Parameters
|
|
5
|
+
|
|
6
|
+
Licensor: Agimon Pty Ltd
|
|
7
|
+
Licensed Work: Po, the software in the Po source repository and the
|
|
8
|
+
packages released from it, in each version released by
|
|
9
|
+
the Licensor.
|
|
10
|
+
The Licensed Work is (c) 2026 Agimon Pty Ltd.
|
|
11
|
+
Material identified as third-party in the "Third-party
|
|
12
|
+
components" section at the end of this file or in a
|
|
13
|
+
NOTICE file, and any package or directory whose own
|
|
14
|
+
license file grants a different license, is not part of
|
|
15
|
+
the Licensed Work and remains under its own license.
|
|
16
|
+
Additional Use Grant: You may make production use of the Licensed Work if
|
|
17
|
+
your use is Eligible Use. "Eligible Use" is production use that falls
|
|
18
|
+
within at least one of the following:
|
|
19
|
+
|
|
20
|
+
(a) Personal Use. Use by an individual for their own personal purposes,
|
|
21
|
+
and not on behalf of, or for the benefit of, an employer, client, or
|
|
22
|
+
other Organization. Use by an individual in the course of employment
|
|
23
|
+
or engagement by an Organization is use by that Organization.
|
|
24
|
+
|
|
25
|
+
(b) Small Organization Use. Use by or on behalf of an Organization whose
|
|
26
|
+
Annual Revenue is less than USD 1,000,000.
|
|
27
|
+
|
|
28
|
+
(c) Non-profit, Education and Research Use. Use, regardless of Annual
|
|
29
|
+
Revenue, by (i) an Organization registered or recognized as a
|
|
30
|
+
non-profit or charitable organization under the laws of its
|
|
31
|
+
jurisdiction, for its non-profit purposes; (ii) an accredited school,
|
|
32
|
+
college, or university, for teaching, learning, or academic research;
|
|
33
|
+
or (iii) a publicly funded research institution, for its research.
|
|
34
|
+
|
|
35
|
+
(d) Service Provider Use. Use by a consultant, contractor, agency, or other
|
|
36
|
+
service provider, regardless of its own Annual Revenue, solely to
|
|
37
|
+
build, deploy, host, operate, or support the Licensed Work for a client
|
|
38
|
+
whose own use would be Eligible Use under (a), (b), or (c). A service
|
|
39
|
+
provider's use for its own purposes is Eligible Use only if the service
|
|
40
|
+
provider itself qualifies under (b) or (c).
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
Hosted services. Offering the Licensed Work to third parties as a hosted
|
|
44
|
+
or managed service whose primary value is the Licensed Work is Eligible
|
|
45
|
+
Use only if each such third party's own use would be Eligible Use.
|
|
46
|
+
|
|
47
|
+
Definitions. "Organization" means any company, partnership, sole
|
|
48
|
+
proprietorship, trust, association, government body, or other entity, and
|
|
49
|
+
includes an individual acting in a business or professional capacity.
|
|
50
|
+
"Affiliate" means any entity that directly or indirectly controls, is
|
|
51
|
+
controlled by, or is under common control with an Organization, where
|
|
52
|
+
"control" means ownership of more than 50% of the voting interests of an
|
|
53
|
+
entity or the power to direct its management and policies by contract or
|
|
54
|
+
otherwise. "Annual Revenue" means the total gross revenue of an
|
|
55
|
+
Organization and all of its Affiliates combined, from all sources and
|
|
56
|
+
whether or not related to the Licensed Work, for its most recently
|
|
57
|
+
completed fiscal year, or, if it has not completed a fiscal year, for the
|
|
58
|
+
twelve months before the use (or since its formation, if shorter),
|
|
59
|
+
converted into US dollars at the average exchange rate for that period.
|
|
60
|
+
Proceeds of equity or debt financing are not revenue.
|
|
61
|
+
|
|
62
|
+
Threshold. If an Organization stops qualifying under (b), its existing
|
|
63
|
+
production use remains Eligible Use for 90 days after it stops
|
|
64
|
+
qualifying, after which it must obtain a commercial license or stop
|
|
65
|
+
production use. Use that was Eligible Use when it occurred never requires
|
|
66
|
+
a commercial license after the fact.
|
|
67
|
+
Change Date: Four years from the date a version of the Licensed Work
|
|
68
|
+
is first publicly released by the Licensor.
|
|
69
|
+
Change License: Apache License, Version 2.0
|
|
70
|
+
|
|
71
|
+
For information about alternative licensing arrangements for the Licensed
|
|
72
|
+
Work, please visit: https://agimon.ai/licensing
|
|
73
|
+
|
|
74
|
+
Notice
|
|
75
|
+
|
|
76
|
+
The Business Source License (this document, or the "License") is not an Open
|
|
77
|
+
Source license. However, the Licensed Work will eventually be made available
|
|
78
|
+
under an Open Source License, as stated in this License.
|
|
79
|
+
|
|
80
|
+
-----------------------------------------------------------------------------
|
|
81
|
+
|
|
82
|
+
Business Source License 1.1
|
|
83
|
+
|
|
84
|
+
Terms
|
|
85
|
+
|
|
86
|
+
The Licensor hereby grants you the right to copy, modify, create derivative
|
|
87
|
+
works, redistribute, and make non-production use of the Licensed Work. The
|
|
88
|
+
Licensor may make an Additional Use Grant, above, permitting limited
|
|
89
|
+
production use.
|
|
90
|
+
|
|
91
|
+
Effective on the Change Date, or the fourth anniversary of the first publicly
|
|
92
|
+
available distribution of a specific version of the Licensed Work under this
|
|
93
|
+
License, whichever comes first, the Licensor hereby grants you rights under
|
|
94
|
+
the terms of the Change License, and the rights granted in the paragraph
|
|
95
|
+
above terminate.
|
|
96
|
+
|
|
97
|
+
If your use of the Licensed Work does not comply with the requirements
|
|
98
|
+
currently in effect as described in this License, you must purchase a
|
|
99
|
+
commercial license from the Licensor, its affiliated entities, or authorized
|
|
100
|
+
resellers, or you must refrain from using the Licensed Work.
|
|
101
|
+
|
|
102
|
+
All copies of the original and modified Licensed Work, and derivative works
|
|
103
|
+
of the Licensed Work, are subject to this License. This License applies
|
|
104
|
+
separately for each version of the Licensed Work and the Change Date may vary
|
|
105
|
+
for each version of the Licensed Work released by Licensor.
|
|
106
|
+
|
|
107
|
+
You must conspicuously display this License on each original or modified copy
|
|
108
|
+
of the Licensed Work. If you receive the Licensed Work in original or
|
|
109
|
+
modified form from a third party, the terms and conditions set forth in this
|
|
110
|
+
License apply to your use of that work.
|
|
111
|
+
|
|
112
|
+
Any use of the Licensed Work in violation of this License will automatically
|
|
113
|
+
terminate your rights under this License for the current and all other
|
|
114
|
+
versions of the Licensed Work.
|
|
115
|
+
|
|
116
|
+
This License does not grant you any right in any trademark or logo of
|
|
117
|
+
Licensor or its affiliates (provided that you may use a trademark or logo of
|
|
118
|
+
Licensor as expressly required by this License).
|
|
119
|
+
|
|
120
|
+
TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
|
|
121
|
+
AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
|
|
122
|
+
EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
|
|
123
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
|
|
124
|
+
TITLE.
|
|
125
|
+
|
|
126
|
+
MariaDB hereby grants you permission to use this License’s text to license
|
|
127
|
+
your works, and to refer to it using the trademark “Business Source License”,
|
|
128
|
+
as long as you comply with the Covenants of Licensor below.
|
|
129
|
+
|
|
130
|
+
Covenants of Licensor
|
|
131
|
+
|
|
132
|
+
In consideration of the right to use this License’s text and the “Business
|
|
133
|
+
Source License” name and trademark, Licensor covenants to MariaDB, and to all
|
|
134
|
+
other recipients of the licensed work to be provided by Licensor:
|
|
135
|
+
|
|
136
|
+
1. To specify as the Change License the GPL Version 2.0 or any later version,
|
|
137
|
+
or a license that is compatible with GPL Version 2.0 or a later version,
|
|
138
|
+
where “compatible” means that software provided under the Change License can
|
|
139
|
+
be included in a program with software provided under GPL Version 2.0 or a
|
|
140
|
+
later version. Licensor may specify additional Change Licenses without
|
|
141
|
+
limitation.
|
|
142
|
+
|
|
143
|
+
2. To either: (a) specify an additional grant of rights to use that does not
|
|
144
|
+
impose any additional restriction on the right granted in this License, as
|
|
145
|
+
the Additional Use Grant; or (b) insert the text “None”.
|
|
146
|
+
|
|
147
|
+
3. To specify a Change Date.
|
|
148
|
+
|
|
149
|
+
4. Not to modify this License in any other way.
|
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ This package is a composable [Po](https://www.npmjs.com/package/@agimon-ai/po) s
|
|
|
11
11
|
|
|
12
12
|
## Install
|
|
13
13
|
|
|
14
|
-
Add `@agimon-ai/po-git` to a selected layer in `.po/modes.yaml`, then run `po sync`. Native metadata selects its server and browser
|
|
14
|
+
Add `@agimon-ai/po-git` to a selected layer in `.po/modes.yaml`, then run `po sync`. Native metadata selects its server and browser plugins; there is no standalone Pi entry.
|
|
15
15
|
|
|
16
16
|
## Use
|
|
17
17
|
|
|
@@ -78,6 +78,6 @@ Maintained by [Agimon](https://agimon.ai/about).
|
|
|
78
78
|
|
|
79
79
|
## License
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
Business Source License 1.1: free for personal use, organisations under USD 1M revenue, non-profits and education. See [LICENSE](LICENSE) and https://agimon.ai/licensing.
|
|
82
82
|
|
|
83
83
|
Native routed declarations own commands, APIs, resources, hooks, and tools. Services own worktree operations and filesystem persistence. Session delivery is consumed through the fixed Session service; no terminal compatibility entry is published.
|
package/dist/apiContracts.cjs
CHANGED
|
@@ -341,7 +341,7 @@ const apiContracts = (0, _agimon_ai_po_core_apiContracts.defineApiContract)({
|
|
|
341
341
|
{
|
|
342
342
|
id: "git.changes.channel",
|
|
343
343
|
scope,
|
|
344
|
-
service: "po.hub
|
|
344
|
+
service: "po.hub",
|
|
345
345
|
member: "git_changes",
|
|
346
346
|
kind: "channel",
|
|
347
347
|
direction: "server-to-client",
|
|
@@ -351,7 +351,7 @@ const apiContracts = (0, _agimon_ai_po_core_apiContracts.defineApiContract)({
|
|
|
351
351
|
{
|
|
352
352
|
id: "git.changes.command",
|
|
353
353
|
scope,
|
|
354
|
-
service: "po.hub
|
|
354
|
+
service: "po.hub",
|
|
355
355
|
member: "git_changes",
|
|
356
356
|
kind: "channel",
|
|
357
357
|
direction: "client-to-server",
|
|
@@ -361,7 +361,7 @@ const apiContracts = (0, _agimon_ai_po_core_apiContracts.defineApiContract)({
|
|
|
361
361
|
{
|
|
362
362
|
id: "git.channel",
|
|
363
363
|
scope,
|
|
364
|
-
service: "po.hub
|
|
364
|
+
service: "po.hub",
|
|
365
365
|
member: "git_worktrees",
|
|
366
366
|
kind: "channel",
|
|
367
367
|
direction: "server-to-client",
|
|
@@ -371,7 +371,7 @@ const apiContracts = (0, _agimon_ai_po_core_apiContracts.defineApiContract)({
|
|
|
371
371
|
{
|
|
372
372
|
id: "git.command",
|
|
373
373
|
scope,
|
|
374
|
-
service: "po.hub
|
|
374
|
+
service: "po.hub",
|
|
375
375
|
member: "git_worktrees",
|
|
376
376
|
kind: "channel",
|
|
377
377
|
direction: "client-to-server",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract","jsonApiResponses"],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/po-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: Type.Optional(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 N = Type.Integer({ minimum: 0 });\nconst ChangesSchema = Type.Object({\n branch: O(S),\n base: O(S),\n added: N,\n removed: N,\n files: N,\n truncated: O(B),\n upstream: O(Type.Object({ ref: S, ahead: N, behind: N })),\n rebase: O(Type.Object({ conflicts: Type.Array(S) })),\n});\nconst SyncErrorTargetSchema = Type.Union([\n Type.Object({ action: literals(['pull', 'rebase', 'abort-rebase']) }),\n Type.Object({ action: Type.Literal('push'), forceRequired: O(Type.Literal(true)) }),\n]);\nexport const GitChangesPayloadSchema = Type.Object({\n changes: O(ChangesSchema),\n pending: O(S),\n error: O(S),\n errorTarget: O(SyncErrorTargetSchema),\n});\nexport const GitChangesCommandSchema = Type.Union([\n Type.Object({ action: literals(['pull', 'rebase', 'abort-rebase']) }),\n Type.Object({ action: Type.Literal('push'), force: O(Type.Literal(true)) }),\n]);\nconst AuthViewSchema = Type.Object({\n method: literals(['none', 'ssh', 'https']),\n ssh: O(Type.Object({ keyPath: O(S) })),\n https: O(Type.Object({ host: S, username: S, hasToken: B })),\n});\nconst AuthSaveSchema = Type.Union([\n Type.Object({ method: Type.Literal('none') }),\n Type.Object({ method: Type.Literal('ssh'), keyPath: O(S) }),\n Type.Object({ method: Type.Literal('https'), host: S, username: S, token: O(Type.String({ writeOnly: true })) }),\n]);\nconst DiffRowSchema = Type.Object({ marker: literals(['+', '-', ' ']), line: N, content: S });\nconst ReviewSummarySchema = Type.Object({\n repository: B,\n branch: O(S),\n base: O(S),\n mergeBase: O(S),\n truncated: O(B),\n files: Type.Array(\n Type.Object({\n path: S,\n status: literals(['added', 'modified', 'deleted', 'untracked', 'conflicted']),\n added: N,\n removed: N,\n binary: O(B),\n }),\n ),\n});\nconst ReviewFileSchema = Type.Object({\n path: S,\n hunks: Type.Array(Type.Object({ start: N, rows: Type.Array(DiffRowSchema) })),\n binary: O(Type.Literal(true)),\n tooLarge: O(Type.Literal(true)),\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 // The new-session dialog's routes and a workspace's remote auth exist only on a workspace mount.\n ...(scope === 'workspace'\n ? [\n {\n id: 'git.auth.read',\n scope,\n basePath: 'git',\n path: '/auth',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"Read a workspace's remote auth for manual sync. The token is never returned.\",\n parameters: [{ name: 'repositoryId', in: 'query' as const, required: true, schema: S }],\n responses: jsonApiResponses(AuthViewSchema),\n },\n {\n id: 'git.auth.save',\n scope,\n basePath: 'git',\n path: '/auth',\n method: 'PUT' as const,\n authentication: 'owner' as const,\n description: \"Replace a workspace's remote auth. Passkey step-up gated for remote devices.\",\n parameters: [{ name: 'repositoryId', in: 'query' as const, required: true, schema: S }],\n body: { required: true, contentType: 'application/json', schema: AuthSaveSchema },\n responses: jsonApiResponses(AuthViewSchema),\n },\n {\n id: 'git.branches',\n scope,\n basePath: 'git',\n path: '/branches',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: 'List the workspace branches for the new-session dialog.',\n responses: jsonApiResponses(\n Type.Object({\n repository: B,\n current: O(S),\n defaultBase: O(S),\n local: Type.Array(Type.Object({ name: S, checkedOutAt: O(S) })),\n remote: Type.Array(Type.Object({ remote: S, name: S })),\n }),\n ),\n },\n {\n id: 'git.sessions.create',\n scope,\n basePath: 'git',\n path: '/sessions',\n method: 'POST' as const,\n authentication: 'owner' as const,\n description: 'Start a top-level worktree session on an existing or new branch.',\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Union([\n Type.Object({ mode: Type.Literal('existing-branch'), branch: S, remote: O(S), name: O(S) }),\n Type.Object({ mode: Type.Literal('new-branch'), branch: S, baseRef: O(S), name: O(S) }),\n ]),\n },\n responses: jsonApiResponses(Type.Object({ sessionId: S, worktreeId: S }), 201),\n },\n ]\n : []),\n // The review routes exist only on a session mount; listed once, beside the global entries.\n ...(scope === 'global'\n ? [\n {\n id: 'git.review.summary',\n scope: 'session' as const,\n basePath: 'git',\n path: '/review',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"List the files the session's checkout changed against its base.\",\n responses: jsonApiResponses(ReviewSummarySchema),\n },\n {\n id: 'git.review.file',\n scope: 'session' as const,\n basePath: 'git',\n path: '/review/file',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"One changed file's hunks; the path must be in the session's change set.\",\n parameters: [{ name: 'path', in: 'query' as const, required: true, schema: Type.String({ minLength: 1 }) }],\n responses: jsonApiResponses(ReviewFileSchema),\n },\n ]\n : []),\n ]),\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'git.changes.channel',\n scope,\n service: 'po.hub.v1',\n member: 'git_changes',\n kind: 'channel',\n direction: 'server-to-client',\n description: \"The session's change against its base, and manual sync state.\",\n input: GitChangesPayloadSchema,\n },\n {\n id: 'git.changes.command',\n scope,\n service: 'po.hub.v1',\n member: 'git_changes',\n kind: 'channel',\n direction: 'client-to-server',\n description: 'Manual pull, push, rebase or abort-rebase for the session.',\n input: GitChangesCommandSchema,\n },\n {\n id: 'git.channel',\n scope,\n service: 'po.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: 'po.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
|
+
{"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract","jsonApiResponses"],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/po-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: Type.Optional(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 N = Type.Integer({ minimum: 0 });\nconst ChangesSchema = Type.Object({\n branch: O(S),\n base: O(S),\n added: N,\n removed: N,\n files: N,\n truncated: O(B),\n upstream: O(Type.Object({ ref: S, ahead: N, behind: N })),\n rebase: O(Type.Object({ conflicts: Type.Array(S) })),\n});\nconst SyncErrorTargetSchema = Type.Union([\n Type.Object({ action: literals(['pull', 'rebase', 'abort-rebase']) }),\n Type.Object({ action: Type.Literal('push'), forceRequired: O(Type.Literal(true)) }),\n]);\nexport const GitChangesPayloadSchema = Type.Object({\n changes: O(ChangesSchema),\n pending: O(S),\n error: O(S),\n errorTarget: O(SyncErrorTargetSchema),\n});\nexport const GitChangesCommandSchema = Type.Union([\n Type.Object({ action: literals(['pull', 'rebase', 'abort-rebase']) }),\n Type.Object({ action: Type.Literal('push'), force: O(Type.Literal(true)) }),\n]);\nconst AuthViewSchema = Type.Object({\n method: literals(['none', 'ssh', 'https']),\n ssh: O(Type.Object({ keyPath: O(S) })),\n https: O(Type.Object({ host: S, username: S, hasToken: B })),\n});\nconst AuthSaveSchema = Type.Union([\n Type.Object({ method: Type.Literal('none') }),\n Type.Object({ method: Type.Literal('ssh'), keyPath: O(S) }),\n Type.Object({ method: Type.Literal('https'), host: S, username: S, token: O(Type.String({ writeOnly: true })) }),\n]);\nconst DiffRowSchema = Type.Object({ marker: literals(['+', '-', ' ']), line: N, content: S });\nconst ReviewSummarySchema = Type.Object({\n repository: B,\n branch: O(S),\n base: O(S),\n mergeBase: O(S),\n truncated: O(B),\n files: Type.Array(\n Type.Object({\n path: S,\n status: literals(['added', 'modified', 'deleted', 'untracked', 'conflicted']),\n added: N,\n removed: N,\n binary: O(B),\n }),\n ),\n});\nconst ReviewFileSchema = Type.Object({\n path: S,\n hunks: Type.Array(Type.Object({ start: N, rows: Type.Array(DiffRowSchema) })),\n binary: O(Type.Literal(true)),\n tooLarge: O(Type.Literal(true)),\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 // The new-session dialog's routes and a workspace's remote auth exist only on a workspace mount.\n ...(scope === 'workspace'\n ? [\n {\n id: 'git.auth.read',\n scope,\n basePath: 'git',\n path: '/auth',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"Read a workspace's remote auth for manual sync. The token is never returned.\",\n parameters: [{ name: 'repositoryId', in: 'query' as const, required: true, schema: S }],\n responses: jsonApiResponses(AuthViewSchema),\n },\n {\n id: 'git.auth.save',\n scope,\n basePath: 'git',\n path: '/auth',\n method: 'PUT' as const,\n authentication: 'owner' as const,\n description: \"Replace a workspace's remote auth. Passkey step-up gated for remote devices.\",\n parameters: [{ name: 'repositoryId', in: 'query' as const, required: true, schema: S }],\n body: { required: true, contentType: 'application/json', schema: AuthSaveSchema },\n responses: jsonApiResponses(AuthViewSchema),\n },\n {\n id: 'git.branches',\n scope,\n basePath: 'git',\n path: '/branches',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: 'List the workspace branches for the new-session dialog.',\n responses: jsonApiResponses(\n Type.Object({\n repository: B,\n current: O(S),\n defaultBase: O(S),\n local: Type.Array(Type.Object({ name: S, checkedOutAt: O(S) })),\n remote: Type.Array(Type.Object({ remote: S, name: S })),\n }),\n ),\n },\n {\n id: 'git.sessions.create',\n scope,\n basePath: 'git',\n path: '/sessions',\n method: 'POST' as const,\n authentication: 'owner' as const,\n description: 'Start a top-level worktree session on an existing or new branch.',\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Union([\n Type.Object({ mode: Type.Literal('existing-branch'), branch: S, remote: O(S), name: O(S) }),\n Type.Object({ mode: Type.Literal('new-branch'), branch: S, baseRef: O(S), name: O(S) }),\n ]),\n },\n responses: jsonApiResponses(Type.Object({ sessionId: S, worktreeId: S }), 201),\n },\n ]\n : []),\n // The review routes exist only on a session mount; listed once, beside the global entries.\n ...(scope === 'global'\n ? [\n {\n id: 'git.review.summary',\n scope: 'session' as const,\n basePath: 'git',\n path: '/review',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"List the files the session's checkout changed against its base.\",\n responses: jsonApiResponses(ReviewSummarySchema),\n },\n {\n id: 'git.review.file',\n scope: 'session' as const,\n basePath: 'git',\n path: '/review/file',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"One changed file's hunks; the path must be in the session's change set.\",\n parameters: [{ name: 'path', in: 'query' as const, required: true, schema: Type.String({ minLength: 1 }) }],\n responses: jsonApiResponses(ReviewFileSchema),\n },\n ]\n : []),\n ]),\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'git.changes.channel',\n scope,\n service: 'po.hub',\n member: 'git_changes',\n kind: 'channel',\n direction: 'server-to-client',\n description: \"The session's change against its base, and manual sync state.\",\n input: GitChangesPayloadSchema,\n },\n {\n id: 'git.changes.command',\n scope,\n service: 'po.hub',\n member: 'git_changes',\n kind: 'channel',\n direction: 'client-to-server',\n description: 'Manual pull, push, rebase or abort-rebase for the session.',\n input: GitChangesCommandSchema,\n },\n {\n id: 'git.channel',\n scope,\n service: 'po.hub',\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: 'po.hub',\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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"}
|
package/dist/apiContracts.mjs
CHANGED
|
@@ -337,7 +337,7 @@ const apiContracts = defineApiContract({
|
|
|
337
337
|
{
|
|
338
338
|
id: "git.changes.channel",
|
|
339
339
|
scope,
|
|
340
|
-
service: "po.hub
|
|
340
|
+
service: "po.hub",
|
|
341
341
|
member: "git_changes",
|
|
342
342
|
kind: "channel",
|
|
343
343
|
direction: "server-to-client",
|
|
@@ -347,7 +347,7 @@ const apiContracts = defineApiContract({
|
|
|
347
347
|
{
|
|
348
348
|
id: "git.changes.command",
|
|
349
349
|
scope,
|
|
350
|
-
service: "po.hub
|
|
350
|
+
service: "po.hub",
|
|
351
351
|
member: "git_changes",
|
|
352
352
|
kind: "channel",
|
|
353
353
|
direction: "client-to-server",
|
|
@@ -357,7 +357,7 @@ const apiContracts = defineApiContract({
|
|
|
357
357
|
{
|
|
358
358
|
id: "git.channel",
|
|
359
359
|
scope,
|
|
360
|
-
service: "po.hub
|
|
360
|
+
service: "po.hub",
|
|
361
361
|
member: "git_worktrees",
|
|
362
362
|
kind: "channel",
|
|
363
363
|
direction: "server-to-client",
|
|
@@ -367,7 +367,7 @@ const apiContracts = defineApiContract({
|
|
|
367
367
|
{
|
|
368
368
|
id: "git.command",
|
|
369
369
|
scope,
|
|
370
|
-
service: "po.hub
|
|
370
|
+
service: "po.hub",
|
|
371
371
|
member: "git_worktrees",
|
|
372
372
|
kind: "channel",
|
|
373
373
|
direction: "client-to-server",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/po-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: Type.Optional(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 N = Type.Integer({ minimum: 0 });\nconst ChangesSchema = Type.Object({\n branch: O(S),\n base: O(S),\n added: N,\n removed: N,\n files: N,\n truncated: O(B),\n upstream: O(Type.Object({ ref: S, ahead: N, behind: N })),\n rebase: O(Type.Object({ conflicts: Type.Array(S) })),\n});\nconst SyncErrorTargetSchema = Type.Union([\n Type.Object({ action: literals(['pull', 'rebase', 'abort-rebase']) }),\n Type.Object({ action: Type.Literal('push'), forceRequired: O(Type.Literal(true)) }),\n]);\nexport const GitChangesPayloadSchema = Type.Object({\n changes: O(ChangesSchema),\n pending: O(S),\n error: O(S),\n errorTarget: O(SyncErrorTargetSchema),\n});\nexport const GitChangesCommandSchema = Type.Union([\n Type.Object({ action: literals(['pull', 'rebase', 'abort-rebase']) }),\n Type.Object({ action: Type.Literal('push'), force: O(Type.Literal(true)) }),\n]);\nconst AuthViewSchema = Type.Object({\n method: literals(['none', 'ssh', 'https']),\n ssh: O(Type.Object({ keyPath: O(S) })),\n https: O(Type.Object({ host: S, username: S, hasToken: B })),\n});\nconst AuthSaveSchema = Type.Union([\n Type.Object({ method: Type.Literal('none') }),\n Type.Object({ method: Type.Literal('ssh'), keyPath: O(S) }),\n Type.Object({ method: Type.Literal('https'), host: S, username: S, token: O(Type.String({ writeOnly: true })) }),\n]);\nconst DiffRowSchema = Type.Object({ marker: literals(['+', '-', ' ']), line: N, content: S });\nconst ReviewSummarySchema = Type.Object({\n repository: B,\n branch: O(S),\n base: O(S),\n mergeBase: O(S),\n truncated: O(B),\n files: Type.Array(\n Type.Object({\n path: S,\n status: literals(['added', 'modified', 'deleted', 'untracked', 'conflicted']),\n added: N,\n removed: N,\n binary: O(B),\n }),\n ),\n});\nconst ReviewFileSchema = Type.Object({\n path: S,\n hunks: Type.Array(Type.Object({ start: N, rows: Type.Array(DiffRowSchema) })),\n binary: O(Type.Literal(true)),\n tooLarge: O(Type.Literal(true)),\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 // The new-session dialog's routes and a workspace's remote auth exist only on a workspace mount.\n ...(scope === 'workspace'\n ? [\n {\n id: 'git.auth.read',\n scope,\n basePath: 'git',\n path: '/auth',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"Read a workspace's remote auth for manual sync. The token is never returned.\",\n parameters: [{ name: 'repositoryId', in: 'query' as const, required: true, schema: S }],\n responses: jsonApiResponses(AuthViewSchema),\n },\n {\n id: 'git.auth.save',\n scope,\n basePath: 'git',\n path: '/auth',\n method: 'PUT' as const,\n authentication: 'owner' as const,\n description: \"Replace a workspace's remote auth. Passkey step-up gated for remote devices.\",\n parameters: [{ name: 'repositoryId', in: 'query' as const, required: true, schema: S }],\n body: { required: true, contentType: 'application/json', schema: AuthSaveSchema },\n responses: jsonApiResponses(AuthViewSchema),\n },\n {\n id: 'git.branches',\n scope,\n basePath: 'git',\n path: '/branches',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: 'List the workspace branches for the new-session dialog.',\n responses: jsonApiResponses(\n Type.Object({\n repository: B,\n current: O(S),\n defaultBase: O(S),\n local: Type.Array(Type.Object({ name: S, checkedOutAt: O(S) })),\n remote: Type.Array(Type.Object({ remote: S, name: S })),\n }),\n ),\n },\n {\n id: 'git.sessions.create',\n scope,\n basePath: 'git',\n path: '/sessions',\n method: 'POST' as const,\n authentication: 'owner' as const,\n description: 'Start a top-level worktree session on an existing or new branch.',\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Union([\n Type.Object({ mode: Type.Literal('existing-branch'), branch: S, remote: O(S), name: O(S) }),\n Type.Object({ mode: Type.Literal('new-branch'), branch: S, baseRef: O(S), name: O(S) }),\n ]),\n },\n responses: jsonApiResponses(Type.Object({ sessionId: S, worktreeId: S }), 201),\n },\n ]\n : []),\n // The review routes exist only on a session mount; listed once, beside the global entries.\n ...(scope === 'global'\n ? [\n {\n id: 'git.review.summary',\n scope: 'session' as const,\n basePath: 'git',\n path: '/review',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"List the files the session's checkout changed against its base.\",\n responses: jsonApiResponses(ReviewSummarySchema),\n },\n {\n id: 'git.review.file',\n scope: 'session' as const,\n basePath: 'git',\n path: '/review/file',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"One changed file's hunks; the path must be in the session's change set.\",\n parameters: [{ name: 'path', in: 'query' as const, required: true, schema: Type.String({ minLength: 1 }) }],\n responses: jsonApiResponses(ReviewFileSchema),\n },\n ]\n : []),\n ]),\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'git.changes.channel',\n scope,\n service: 'po.hub.v1',\n member: 'git_changes',\n kind: 'channel',\n direction: 'server-to-client',\n description: \"The session's change against its base, and manual sync state.\",\n input: GitChangesPayloadSchema,\n },\n {\n id: 'git.changes.command',\n scope,\n service: 'po.hub.v1',\n member: 'git_changes',\n kind: 'channel',\n direction: 'client-to-server',\n description: 'Manual pull, push, rebase or abort-rebase for the session.',\n input: GitChangesCommandSchema,\n },\n {\n id: 'git.channel',\n scope,\n service: 'po.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: 'po.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
|
+
{"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses } from '@agimon-ai/po-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: Type.Optional(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 N = Type.Integer({ minimum: 0 });\nconst ChangesSchema = Type.Object({\n branch: O(S),\n base: O(S),\n added: N,\n removed: N,\n files: N,\n truncated: O(B),\n upstream: O(Type.Object({ ref: S, ahead: N, behind: N })),\n rebase: O(Type.Object({ conflicts: Type.Array(S) })),\n});\nconst SyncErrorTargetSchema = Type.Union([\n Type.Object({ action: literals(['pull', 'rebase', 'abort-rebase']) }),\n Type.Object({ action: Type.Literal('push'), forceRequired: O(Type.Literal(true)) }),\n]);\nexport const GitChangesPayloadSchema = Type.Object({\n changes: O(ChangesSchema),\n pending: O(S),\n error: O(S),\n errorTarget: O(SyncErrorTargetSchema),\n});\nexport const GitChangesCommandSchema = Type.Union([\n Type.Object({ action: literals(['pull', 'rebase', 'abort-rebase']) }),\n Type.Object({ action: Type.Literal('push'), force: O(Type.Literal(true)) }),\n]);\nconst AuthViewSchema = Type.Object({\n method: literals(['none', 'ssh', 'https']),\n ssh: O(Type.Object({ keyPath: O(S) })),\n https: O(Type.Object({ host: S, username: S, hasToken: B })),\n});\nconst AuthSaveSchema = Type.Union([\n Type.Object({ method: Type.Literal('none') }),\n Type.Object({ method: Type.Literal('ssh'), keyPath: O(S) }),\n Type.Object({ method: Type.Literal('https'), host: S, username: S, token: O(Type.String({ writeOnly: true })) }),\n]);\nconst DiffRowSchema = Type.Object({ marker: literals(['+', '-', ' ']), line: N, content: S });\nconst ReviewSummarySchema = Type.Object({\n repository: B,\n branch: O(S),\n base: O(S),\n mergeBase: O(S),\n truncated: O(B),\n files: Type.Array(\n Type.Object({\n path: S,\n status: literals(['added', 'modified', 'deleted', 'untracked', 'conflicted']),\n added: N,\n removed: N,\n binary: O(B),\n }),\n ),\n});\nconst ReviewFileSchema = Type.Object({\n path: S,\n hunks: Type.Array(Type.Object({ start: N, rows: Type.Array(DiffRowSchema) })),\n binary: O(Type.Literal(true)),\n tooLarge: O(Type.Literal(true)),\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 // The new-session dialog's routes and a workspace's remote auth exist only on a workspace mount.\n ...(scope === 'workspace'\n ? [\n {\n id: 'git.auth.read',\n scope,\n basePath: 'git',\n path: '/auth',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"Read a workspace's remote auth for manual sync. The token is never returned.\",\n parameters: [{ name: 'repositoryId', in: 'query' as const, required: true, schema: S }],\n responses: jsonApiResponses(AuthViewSchema),\n },\n {\n id: 'git.auth.save',\n scope,\n basePath: 'git',\n path: '/auth',\n method: 'PUT' as const,\n authentication: 'owner' as const,\n description: \"Replace a workspace's remote auth. Passkey step-up gated for remote devices.\",\n parameters: [{ name: 'repositoryId', in: 'query' as const, required: true, schema: S }],\n body: { required: true, contentType: 'application/json', schema: AuthSaveSchema },\n responses: jsonApiResponses(AuthViewSchema),\n },\n {\n id: 'git.branches',\n scope,\n basePath: 'git',\n path: '/branches',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: 'List the workspace branches for the new-session dialog.',\n responses: jsonApiResponses(\n Type.Object({\n repository: B,\n current: O(S),\n defaultBase: O(S),\n local: Type.Array(Type.Object({ name: S, checkedOutAt: O(S) })),\n remote: Type.Array(Type.Object({ remote: S, name: S })),\n }),\n ),\n },\n {\n id: 'git.sessions.create',\n scope,\n basePath: 'git',\n path: '/sessions',\n method: 'POST' as const,\n authentication: 'owner' as const,\n description: 'Start a top-level worktree session on an existing or new branch.',\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Union([\n Type.Object({ mode: Type.Literal('existing-branch'), branch: S, remote: O(S), name: O(S) }),\n Type.Object({ mode: Type.Literal('new-branch'), branch: S, baseRef: O(S), name: O(S) }),\n ]),\n },\n responses: jsonApiResponses(Type.Object({ sessionId: S, worktreeId: S }), 201),\n },\n ]\n : []),\n // The review routes exist only on a session mount; listed once, beside the global entries.\n ...(scope === 'global'\n ? [\n {\n id: 'git.review.summary',\n scope: 'session' as const,\n basePath: 'git',\n path: '/review',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"List the files the session's checkout changed against its base.\",\n responses: jsonApiResponses(ReviewSummarySchema),\n },\n {\n id: 'git.review.file',\n scope: 'session' as const,\n basePath: 'git',\n path: '/review/file',\n method: 'GET' as const,\n authentication: 'owner' as const,\n description: \"One changed file's hunks; the path must be in the session's change set.\",\n parameters: [{ name: 'path', in: 'query' as const, required: true, schema: Type.String({ minLength: 1 }) }],\n responses: jsonApiResponses(ReviewFileSchema),\n },\n ]\n : []),\n ]),\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'git.changes.channel',\n scope,\n service: 'po.hub',\n member: 'git_changes',\n kind: 'channel',\n direction: 'server-to-client',\n description: \"The session's change against its base, and manual sync state.\",\n input: GitChangesPayloadSchema,\n },\n {\n id: 'git.changes.command',\n scope,\n service: 'po.hub',\n member: 'git_changes',\n kind: 'channel',\n direction: 'client-to-server',\n description: 'Manual pull, push, rebase or abort-rebase for the session.',\n input: GitChangesCommandSchema,\n },\n {\n id: 'git.channel',\n scope,\n service: 'po.hub',\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: 'po.hub',\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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"}
|
|
@@ -2,14 +2,14 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_worktreeOperations = require("../worktreeOperations-
|
|
5
|
+
const require_worktreeOperations = require("../worktreeOperations-Dxs3txKL.cjs");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
node_fs = require_worktreeOperations.__toESM(node_fs, 1);
|
|
8
8
|
let node_os = require("node:os");
|
|
9
9
|
node_os = require_worktreeOperations.__toESM(node_os, 1);
|
|
10
10
|
let node_path = require("node:path");
|
|
11
11
|
node_path = require_worktreeOperations.__toESM(node_path, 1);
|
|
12
|
-
let
|
|
12
|
+
let _agimon_ai_po_core_serverPlugin = require("@agimon-ai/po-core/serverPlugin");
|
|
13
13
|
let _agimon_ai_po_core_extensionFile = require("@agimon-ai/po-core/extensionFile");
|
|
14
14
|
let _agimon_ai_po_session = require("@agimon-ai/po-session");
|
|
15
15
|
let typebox = require("typebox");
|
|
@@ -310,8 +310,8 @@ function progressResult(action, label) {
|
|
|
310
310
|
};
|
|
311
311
|
}
|
|
312
312
|
function createGitSession({ context, host: serverHost }) {
|
|
313
|
-
if (serverHost.context.directEvents === void 0) throw new Error("Git
|
|
314
|
-
if (serverHost.context.sessionId === void 0) throw new Error("Git
|
|
313
|
+
if (serverHost.context.directEvents === void 0) throw new Error("Git server plugin requires the session direct event bus.");
|
|
314
|
+
if (serverHost.context.sessionId === void 0) throw new Error("Git server plugin requires a session identity.");
|
|
315
315
|
const sessionId = serverHost.context.sessionId;
|
|
316
316
|
const directEvents = serverHost.context.directEvents;
|
|
317
317
|
const messageInbox = require_worktreeOperations.createWorktreeMessageInbox(directEvents, sessionId);
|
|
@@ -319,7 +319,7 @@ function createGitSession({ context, host: serverHost }) {
|
|
|
319
319
|
git: require_worktreeOperations.createWorktreeGit(),
|
|
320
320
|
sessionService: serverHost.context.sessionService,
|
|
321
321
|
messageInbox,
|
|
322
|
-
sessionDelivery: () => (0, _agimon_ai_po_session.
|
|
322
|
+
sessionDelivery: () => (0, _agimon_ai_po_session.readPoSessionDelivery)(context)
|
|
323
323
|
});
|
|
324
324
|
const resources = [{
|
|
325
325
|
when: {
|
|
@@ -331,11 +331,11 @@ function createGitSession({ context, host: serverHost }) {
|
|
|
331
331
|
},
|
|
332
332
|
name: "po-git",
|
|
333
333
|
kind: "context",
|
|
334
|
-
read: () => (0,
|
|
334
|
+
read: () => (0, _agimon_ai_po_core_serverPlugin.readPackageResource)(require("url").pathToFileURL(__filename).href, "llms.txt")
|
|
335
335
|
}, {
|
|
336
336
|
name: "po-use-git",
|
|
337
337
|
kind: "skill",
|
|
338
|
-
read: () => (0,
|
|
338
|
+
read: () => (0, _agimon_ai_po_core_serverPlugin.readPackageResource)(require("url").pathToFileURL(__filename).href, "src/prompts/po-use-git/SKILL.md")
|
|
339
339
|
}];
|
|
340
340
|
const tool = {
|
|
341
341
|
name: RUN_WORKTREE_TOOL_NAME,
|
|
@@ -935,7 +935,7 @@ function createGitAuthStore(homeDir = node_os.default.homedir()) {
|
|
|
935
935
|
const key = workspaceKey(workspaceRoot);
|
|
936
936
|
const current = readFile();
|
|
937
937
|
const next = parseGitAuthSave(request, current.workspaces[key] ?? { method: "none" }, homeDir);
|
|
938
|
-
const root = require_worktreeOperations.
|
|
938
|
+
const root = require_worktreeOperations.poGitRoot(homeDir);
|
|
939
939
|
node_fs.default.mkdirSync(root, {
|
|
940
940
|
recursive: true,
|
|
941
941
|
mode: OWNER_ONLY_DIRECTORY
|
|
@@ -1107,7 +1107,7 @@ function badRequest(message) {
|
|
|
1107
1107
|
return Response.json({ error: message }, { status: 400 });
|
|
1108
1108
|
}
|
|
1109
1109
|
function failed(error) {
|
|
1110
|
-
if (error instanceof require_worktreeOperations.
|
|
1110
|
+
if (error instanceof require_worktreeOperations.PoGitExpectedError) return Response.json({
|
|
1111
1111
|
error: error.message,
|
|
1112
1112
|
code: error.code
|
|
1113
1113
|
}, { status: error.retryable ? 503 : 409 });
|
|
@@ -1198,7 +1198,7 @@ var route_server_default = (0, _agimon_ai_po_core_extensionFile.defineRoute)({
|
|
|
1198
1198
|
try {
|
|
1199
1199
|
return Response.json(gitAuth.save(root, await request.json().catch(() => void 0)));
|
|
1200
1200
|
} catch (error) {
|
|
1201
|
-
if (error instanceof require_worktreeOperations.
|
|
1201
|
+
if (error instanceof require_worktreeOperations.PoGitExpectedError && error.code === "invalid_request") {
|
|
1202
1202
|
const text = error.message.replace(/^\[[a-z_]+\] /u, "").replace("\nRecovery: ", " ");
|
|
1203
1203
|
return Response.json({
|
|
1204
1204
|
error: text,
|
|
@@ -1373,12 +1373,12 @@ const RULES = [
|
|
|
1373
1373
|
}
|
|
1374
1374
|
];
|
|
1375
1375
|
function classifyGitFailure(operation, result, mismatch) {
|
|
1376
|
-
if (result.timedOut) return new require_worktreeOperations.
|
|
1376
|
+
if (result.timedOut) return new require_worktreeOperations.PoGitExpectedError("git_timeout", `git ${operation} took too long and was stopped.`, true, "Check the network, then try again.");
|
|
1377
1377
|
const text = `${result.stderr}\n${result.stdout}`.toLowerCase();
|
|
1378
1378
|
const rule = RULES.find((candidate) => candidate.phrases.some((phrase) => text.includes(phrase)));
|
|
1379
|
-
if (rule === void 0) return new require_worktreeOperations.
|
|
1379
|
+
if (rule === void 0) return new require_worktreeOperations.PoGitExpectedError("git_failed", `git ${operation} failed (exit ${String(result.code)}).`, false, "Run the same command in a terminal in this checkout to see what git says.");
|
|
1380
1380
|
const recovery = rule.code === "auth_failed" && mismatch !== void 0 ? `${mismatch} ${rule.recovery}` : rule.recovery;
|
|
1381
|
-
return new require_worktreeOperations.
|
|
1381
|
+
return new require_worktreeOperations.PoGitExpectedError(rule.code, rule.message, rule.retryable, recovery);
|
|
1382
1382
|
}
|
|
1383
1383
|
//#endregion
|
|
1384
1384
|
//#region src/services/gitSync/index.ts
|
|
@@ -1401,7 +1401,7 @@ function classifyGitFailure(operation, result, mismatch) {
|
|
|
1401
1401
|
*/
|
|
1402
1402
|
const DONE = { outcome: "done" };
|
|
1403
1403
|
function expected(code, message, recovery) {
|
|
1404
|
-
return new require_worktreeOperations.
|
|
1404
|
+
return new require_worktreeOperations.PoGitExpectedError(code, message, false, recovery);
|
|
1405
1405
|
}
|
|
1406
1406
|
async function readLine(cwd, args) {
|
|
1407
1407
|
const result = await require_worktreeOperations.runGit(cwd, args, { timeout: require_worktreeOperations.READ_TIMEOUT_MS });
|
|
@@ -1590,9 +1590,9 @@ const GIT_CHANGES_TYPE = "git_changes";
|
|
|
1590
1590
|
* DESIGN PATTERNS:
|
|
1591
1591
|
* - Apart from the worktrees channel. Worktrees are repository management;
|
|
1592
1592
|
* this is the session's own code change.
|
|
1593
|
-
* - Push, not poll. The session
|
|
1594
|
-
* tool call and settled turn; recounts are coalesced to one in
|
|
1595
|
-
* one rerun, so a burst of tool calls costs at most two.
|
|
1593
|
+
* - Push, not poll. The session's server plugin publishes a "changed" event
|
|
1594
|
+
* after every tool call and settled turn; recounts are coalesced to one in
|
|
1595
|
+
* flight plus one rerun, so a burst of tool calls costs at most two.
|
|
1596
1596
|
* - One sync command per session. A rebase and a push must never overlap.
|
|
1597
1597
|
* - Auth is read fresh for each command from the session's workspace, and goes
|
|
1598
1598
|
* only into that command's git child.
|
|
@@ -1628,13 +1628,13 @@ const PENDING = {
|
|
|
1628
1628
|
/** The error target a failure maps to: a rejected plain push asks for a confirmed lease force. */
|
|
1629
1629
|
function errorTargetFor$1(command, error) {
|
|
1630
1630
|
if (command.action !== "push") return { action: command.action };
|
|
1631
|
-
return error instanceof require_worktreeOperations.
|
|
1631
|
+
return error instanceof require_worktreeOperations.PoGitExpectedError && error.code === "push_needs_force" && command.force !== true ? {
|
|
1632
1632
|
action: "push",
|
|
1633
1633
|
forceRequired: true
|
|
1634
1634
|
} : { action: "push" };
|
|
1635
1635
|
}
|
|
1636
1636
|
function failureText$1(error) {
|
|
1637
|
-
if (error instanceof require_worktreeOperations.
|
|
1637
|
+
if (error instanceof require_worktreeOperations.PoGitExpectedError) return error.message.replace(/^\[[a-z_]+\] /u, "").replace("\nRecovery: ", " ");
|
|
1638
1638
|
return "The git command failed.";
|
|
1639
1639
|
}
|
|
1640
1640
|
function createGitChangesChannel(options = {}) {
|
|
@@ -1752,7 +1752,7 @@ function createGitChangesChannel(options = {}) {
|
|
|
1752
1752
|
errorTarget: void 0
|
|
1753
1753
|
});
|
|
1754
1754
|
run(scope, command).then(() => update(scope.sessionId, { pending: void 0 })).catch((error) => {
|
|
1755
|
-
host.onNotice(`git ${command.action} failed for ${scope.sessionId} (${error instanceof require_worktreeOperations.
|
|
1755
|
+
host.onNotice(`git ${command.action} failed for ${scope.sessionId} (${error instanceof require_worktreeOperations.PoGitExpectedError ? error.code : "unexpected"})`);
|
|
1756
1756
|
update(scope.sessionId, {
|
|
1757
1757
|
pending: void 0,
|
|
1758
1758
|
error: failureText$1(error),
|
|
@@ -1864,7 +1864,7 @@ function parseCommand(payload) {
|
|
|
1864
1864
|
* echoed: a git error can carry a remote URL with a token in it.
|
|
1865
1865
|
*/
|
|
1866
1866
|
function failureText(error) {
|
|
1867
|
-
return error instanceof require_worktreeOperations.
|
|
1867
|
+
return error instanceof require_worktreeOperations.PoGitExpectedError ? error.message : "The worktree operation failed.";
|
|
1868
1868
|
}
|
|
1869
1869
|
/** Starts one direct-event subscription per managed session. */
|
|
1870
1870
|
function createWorktreesChannel(options = {}) {
|
|
@@ -2058,13 +2058,16 @@ var runWorktree_server_default = (0, _agimon_ai_po_core_extensionFile.defineServ
|
|
|
2058
2058
|
//#endregion
|
|
2059
2059
|
//#region generated/server.ts
|
|
2060
2060
|
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
2061
|
+
/* v8 ignore next -- generated normalization branch */
|
|
2062
|
+
const defined = (values) => values.filter((value) => value !== void 0);
|
|
2061
2063
|
const via = (identity, value) => value === void 0 ? void 0 : {
|
|
2062
2064
|
...identity,
|
|
2063
2065
|
...value
|
|
2064
2066
|
};
|
|
2065
|
-
const
|
|
2067
|
+
const serverPlugin = (0, _agimon_ai_po_core_serverPlugin.defineServerPlugin)({
|
|
2066
2068
|
name: "@agimon-ai/po-git",
|
|
2067
|
-
providerOverrides: (0,
|
|
2069
|
+
providerOverrides: (0, _agimon_ai_po_core_serverPlugin.composeServerProviderOverrides)(root_server_default),
|
|
2070
|
+
injects: (0, _agimon_ai_po_core_extensionFile.composeRootInjects)({ session: [root_server_default] }),
|
|
2068
2071
|
global: (context) => ({
|
|
2069
2072
|
get api() {
|
|
2070
2073
|
return [at(route_server_default, context)];
|
|
@@ -2078,11 +2081,11 @@ const facet = (0, _agimon_ai_po_core_serverFacet.defineServerPlugin)({
|
|
|
2078
2081
|
return [at(route_server_default, context)];
|
|
2079
2082
|
},
|
|
2080
2083
|
get channels() {
|
|
2081
|
-
return [() => via({ frameType: "git_changes" }, git_changes_server_default()), () => via({ frameType: "git_worktrees" }, git_worktrees_server_default())];
|
|
2084
|
+
return defined([context.hosted("global") ? void 0 : () => via({ frameType: "git_changes" }, git_changes_server_default()), context.hosted("global") ? void 0 : () => via({ frameType: "git_worktrees" }, git_worktrees_server_default())]);
|
|
2082
2085
|
}
|
|
2083
2086
|
}),
|
|
2084
2087
|
session: async (context) => {
|
|
2085
|
-
const scopeSession = await root_server_default
|
|
2088
|
+
const scopeSession = await context.scopeRoot("session", root_server_default, context);
|
|
2086
2089
|
const contextSession = {
|
|
2087
2090
|
...context,
|
|
2088
2091
|
root: scopeSession.value
|
|
@@ -2093,7 +2096,7 @@ const facet = (0, _agimon_ai_po_core_serverFacet.defineServerPlugin)({
|
|
|
2093
2096
|
return [at(route_server_default, context)];
|
|
2094
2097
|
},
|
|
2095
2098
|
get channels() {
|
|
2096
|
-
return [() => via({ frameType: "git_changes" }, git_changes_server_default()), () => via({ frameType: "git_worktrees" }, git_worktrees_server_default())];
|
|
2099
|
+
return defined([context.hosted("global") ? void 0 : () => via({ frameType: "git_changes" }, git_changes_server_default()), context.hosted("global") ? void 0 : () => via({ frameType: "git_worktrees" }, git_worktrees_server_default())]);
|
|
2097
2100
|
},
|
|
2098
2101
|
get hooks() {
|
|
2099
2102
|
return [via({ event: "agent_settled" }, at(agent_settled_server_default, contextSession)), via({ event: "tool_execution_end" }, at(tool_execution_end_server_default, contextSession))];
|
|
@@ -2116,7 +2119,7 @@ const facet = (0, _agimon_ai_po_core_serverFacet.defineServerPlugin)({
|
|
|
2116
2119
|
}
|
|
2117
2120
|
});
|
|
2118
2121
|
//#endregion
|
|
2119
|
-
exports.default =
|
|
2120
|
-
exports.
|
|
2122
|
+
exports.default = serverPlugin;
|
|
2123
|
+
exports.serverPlugin = serverPlugin;
|
|
2121
2124
|
|
|
2122
2125
|
//# sourceMappingURL=server.cjs.map
|