spawnfile 0.1.10 → 0.1.12
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/README.md +13 -2
- package/dist/cli/lifecycleCommands.js +101 -1
- package/dist/cli/modelCommands.js +3 -0
- package/dist/cli/resolveCommandInput.d.ts +19 -0
- package/dist/cli/resolveCommandInput.js +25 -0
- package/dist/cli/runCli.d.ts +4 -1
- package/dist/cli/runCli.js +37 -13
- package/dist/cli/runtimeCommands.js +1 -0
- package/dist/cli/statusCommand.d.ts +42 -0
- package/dist/cli/statusCommand.js +394 -0
- package/dist/cli/surfaceCommands.js +4 -0
- package/dist/compiler/agentSurfaces.js +2 -4
- package/dist/compiler/buildCompilePlanTeams.js +3 -1
- package/dist/compiler/compileProject.js +19 -10
- package/dist/compiler/compileProjectSupport.d.ts +1 -0
- package/dist/compiler/compileProjectSupport.js +1 -1
- package/dist/compiler/containerArtifacts.d.ts +1 -0
- package/dist/compiler/containerArtifacts.js +208 -32
- package/dist/compiler/containerArtifactsPlans.js +7 -4
- package/dist/compiler/containerArtifactsRender.d.ts +7 -1
- package/dist/compiler/containerArtifactsRender.js +6 -0
- package/dist/compiler/containerArtifactsTypes.d.ts +9 -0
- package/dist/compiler/containerEntrypointRender.js +18 -31
- package/dist/compiler/index.d.ts +1 -0
- package/dist/compiler/index.js +1 -0
- package/dist/compiler/moltnetArtifacts.d.ts +2 -0
- package/dist/compiler/moltnetArtifacts.js +58 -99
- package/dist/compiler/moltnetClientConfig.d.ts +2 -2
- package/dist/compiler/moltnetClientConfig.js +16 -23
- package/dist/compiler/moltnetConfigLowering.d.ts +3 -0
- package/dist/compiler/moltnetConfigLowering.js +13 -2
- package/dist/compiler/moltnetNodeConfig.d.ts +27 -0
- package/dist/compiler/moltnetNodeConfig.js +68 -0
- package/dist/compiler/moltnetResolution.js +1 -1
- package/dist/compiler/moltnetRoomMemberships.js +1 -2
- package/dist/compiler/moltnetRoomPolicyCompatibility.d.ts +4 -0
- package/dist/compiler/moltnetRoomPolicyCompatibility.js +28 -0
- package/dist/compiler/moltnetRuntimeConfig.d.ts +1 -1
- package/dist/compiler/moltnetRuntimeConfig.js +1 -13
- package/dist/compiler/networkBinding.d.ts +14 -0
- package/dist/compiler/networkBinding.js +34 -0
- package/dist/compiler/publishProject.d.ts +13 -0
- package/dist/compiler/publishProject.js +72 -0
- package/dist/compiler/runProject.d.ts +26 -12
- package/dist/compiler/runProject.js +102 -125
- package/dist/compiler/runProjectAuth.d.ts +5 -0
- package/dist/compiler/runProjectAuth.js +98 -0
- package/dist/compiler/runProjectDocker.d.ts +19 -0
- package/dist/compiler/runProjectDocker.js +57 -0
- package/dist/compiler/types.d.ts +3 -2
- package/dist/compiler/upProject.d.ts +6 -0
- package/dist/compiler/upProject.js +42 -8
- package/dist/compiler/view/buildOrganizationView.js +27 -3
- package/dist/compiler/view/declarations.d.ts +4 -0
- package/dist/compiler/view/declarations.js +104 -0
- package/dist/compiler/view/renderNetworks.js +12 -3
- package/dist/compiler/view/renderTree.js +16 -3
- package/dist/compiler/view/types.d.ts +77 -1
- package/dist/deployment/dockerInspect.d.ts +29 -0
- package/dist/deployment/dockerInspect.js +130 -0
- package/dist/deployment/dockerLabels.d.ts +16 -0
- package/dist/deployment/dockerLabels.js +32 -0
- package/dist/deployment/dockerLogs.d.ts +24 -0
- package/dist/deployment/dockerLogs.js +96 -0
- package/dist/deployment/dockerManager.d.ts +59 -0
- package/dist/deployment/dockerManager.js +76 -0
- package/dist/deployment/dockerProbeGateway.d.ts +16 -0
- package/dist/deployment/dockerProbeGateway.js +48 -0
- package/dist/deployment/homeStore.d.ts +19 -0
- package/dist/deployment/homeStore.js +130 -0
- package/dist/deployment/index.d.ts +9 -0
- package/dist/deployment/index.js +9 -0
- package/dist/deployment/names.d.ts +3 -0
- package/dist/deployment/names.js +12 -0
- package/dist/deployment/record.d.ts +76 -0
- package/dist/deployment/record.js +174 -0
- package/dist/deployment/target.d.ts +35 -0
- package/dist/deployment/target.js +96 -0
- package/dist/distribution/buildDistributionReport.d.ts +22 -0
- package/dist/distribution/buildDistributionReport.js +51 -0
- package/dist/distribution/consumeImage.d.ts +29 -0
- package/dist/distribution/consumeImage.js +254 -0
- package/dist/distribution/consumeImageSupport.d.ts +18 -0
- package/dist/distribution/consumeImageSupport.js +63 -0
- package/dist/distribution/distributionReportSchema.d.ts +84 -0
- package/dist/distribution/distributionReportSchema.js +107 -0
- package/dist/distribution/dockerRunner.d.ts +5 -0
- package/dist/distribution/dockerRunner.js +21 -0
- package/dist/distribution/extractImage.d.ts +25 -0
- package/dist/distribution/extractImage.js +96 -0
- package/dist/distribution/fingerprint.d.ts +2 -0
- package/dist/distribution/fingerprint.js +14 -0
- package/dist/distribution/imageRef.d.ts +9 -0
- package/dist/distribution/imageRef.js +65 -0
- package/dist/distribution/imageRuntimeAuth.d.ts +19 -0
- package/dist/distribution/imageRuntimeAuth.js +71 -0
- package/dist/distribution/index.d.ts +24 -0
- package/dist/distribution/index.js +16 -0
- package/dist/distribution/preflight.d.ts +11 -0
- package/dist/distribution/preflight.js +65 -0
- package/dist/distribution/projectImageView.d.ts +8 -0
- package/dist/distribution/projectImageView.js +83 -0
- package/dist/distribution/projectName.d.ts +1 -0
- package/dist/distribution/projectName.js +12 -0
- package/dist/distribution/renderImageInterface.d.ts +30 -0
- package/dist/distribution/renderImageInterface.js +86 -0
- package/dist/distribution/tarReader.d.ts +10 -0
- package/dist/distribution/tarReader.js +69 -0
- package/dist/distribution/types.d.ts +80 -0
- package/dist/distribution/types.js +4 -0
- package/dist/distribution/verifyDistributionReport.d.ts +12 -0
- package/dist/distribution/verifyDistributionReport.js +29 -0
- package/dist/filesystem/paths.d.ts +6 -0
- package/dist/filesystem/paths.js +11 -0
- package/dist/manifest/loadManifest.js +22 -2
- package/dist/manifest/renderSpawnfile.js +2 -4
- package/dist/manifest/renderSpawnfileNetworks.js +5 -0
- package/dist/manifest/schemas.d.ts +71 -41
- package/dist/manifest/surfaceSchemas.d.ts +19 -47
- package/dist/manifest/surfaceSchemas.js +3 -6
- package/dist/manifest/teamNetworkAccessSchemas.d.ts +15 -0
- package/dist/manifest/teamNetworkAccessSchemas.js +8 -0
- package/dist/manifest/teamNetworkConsoleSchemas.d.ts +7 -0
- package/dist/manifest/teamNetworkConsoleSchemas.js +19 -0
- package/dist/manifest/teamNetworkSchemas.d.ts +60 -0
- package/dist/manifest/teamNetworkSchemas.js +20 -7
- package/dist/report/createReport.d.ts +7 -1
- package/dist/report/createReport.js +28 -1
- package/dist/report/types.d.ts +43 -0
- package/dist/runtime/container.js +0 -16
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.js +1 -0
- package/dist/runtime/install.d.ts +0 -10
- package/dist/runtime/install.js +0 -45
- package/dist/runtime/openclaw/adapter.js +9 -1
- package/dist/runtime/openclaw/configAuth.d.ts +15 -0
- package/dist/runtime/openclaw/configAuth.js +46 -0
- package/dist/runtime/openclaw/runAuth.d.ts +6 -0
- package/dist/runtime/openclaw/runAuth.js +7 -55
- package/dist/runtime/openclaw/statusProbes.d.ts +2 -0
- package/dist/runtime/openclaw/statusProbes.js +31 -0
- package/dist/runtime/picoclaw/adapter.js +10 -0
- package/dist/runtime/picoclaw/runAuth.d.ts +7 -0
- package/dist/runtime/picoclaw/runAuth.js +8 -68
- package/dist/runtime/picoclaw/statusProbes.d.ts +2 -0
- package/dist/runtime/picoclaw/statusProbes.js +100 -0
- package/dist/runtime/registry.d.ts +0 -5
- package/dist/runtime/registry.js +2 -12
- package/dist/runtime/statusProbes.d.ts +16 -0
- package/dist/runtime/statusProbes.js +41 -0
- package/dist/runtime/types.d.ts +52 -1
- package/dist/shared/errors.d.ts +6 -0
- package/dist/shared/errors.js +9 -0
- package/dist/status/buildStatus.d.ts +13 -0
- package/dist/status/buildStatus.js +266 -0
- package/dist/status/compileReport.d.ts +96 -0
- package/dist/status/compileReport.js +230 -0
- package/dist/status/compiledContainerObservations.d.ts +5 -0
- package/dist/status/compiledContainerObservations.js +63 -0
- package/dist/status/deploymentLogs.d.ts +12 -0
- package/dist/status/deploymentLogs.js +45 -0
- package/dist/status/deployments.d.ts +14 -0
- package/dist/status/deployments.js +128 -0
- package/dist/status/imageStatusReport.d.ts +10 -0
- package/dist/status/imageStatusReport.js +73 -0
- package/dist/status/index.d.ts +14 -0
- package/dist/status/index.js +14 -0
- package/dist/status/moltnetProbes.d.ts +21 -0
- package/dist/status/moltnetProbes.js +240 -0
- package/dist/status/registryDrift.d.ts +28 -0
- package/dist/status/registryDrift.js +119 -0
- package/dist/status/renderStatus.d.ts +2 -0
- package/dist/status/renderStatus.js +230 -0
- package/dist/status/runtimeProbes.d.ts +13 -0
- package/dist/status/runtimeProbes.js +111 -0
- package/dist/status/selectionSubjects.d.ts +8 -0
- package/dist/status/selectionSubjects.js +77 -0
- package/dist/status/selectors.d.ts +14 -0
- package/dist/status/selectors.js +90 -0
- package/dist/status/traversal.d.ts +6 -0
- package/dist/status/traversal.js +15 -0
- package/dist/status/types.d.ts +113 -0
- package/dist/status/types.js +1 -0
- package/package.json +4 -2
- package/runtimes.yaml +22 -15
- package/dist/runtime/tinyclaw/adapter.d.ts +0 -2
- package/dist/runtime/tinyclaw/adapter.js +0 -284
- package/dist/runtime/tinyclaw/runAuth.d.ts +0 -2
- package/dist/runtime/tinyclaw/runAuth.js +0 -49
- package/dist/runtime/tinyclaw/scaffold-assets/AGENTS.md +0 -160
- package/dist/runtime/tinyclaw/scaffold-assets/CLAUDE.md +0 -5
- package/dist/runtime/tinyclaw/scaffold-assets/SOUL.md +0 -177
- package/dist/runtime/tinyclaw/scaffold.d.ts +0 -2
- package/dist/runtime/tinyclaw/scaffold.js +0 -24
- package/dist/runtime/tinyclaw/schedules.d.ts +0 -9
- package/dist/runtime/tinyclaw/schedules.js +0 -62
- package/dist/runtime/tinyclaw/surfaces.d.ts +0 -8
- package/dist/runtime/tinyclaw/surfaces.js +0 -94
|
@@ -1,37 +1,71 @@
|
|
|
1
|
+
import path from "node:path";
|
|
1
2
|
import { removeDirectory } from "../filesystem/index.js";
|
|
3
|
+
import { writeDockerDeploymentRecordForRun } from "../deployment/index.js";
|
|
2
4
|
import { buildProject } from "./buildProject.js";
|
|
3
|
-
import { createDockerRunInvocation, runDockerContainer } from "./runProject.js";
|
|
5
|
+
import { createDockerRunInvocation, resolveDetachedDeploymentOptions, runDockerContainer } from "./runProject.js";
|
|
4
6
|
import { requireAuthProfile } from "../auth/index.js";
|
|
7
|
+
import { DEFAULT_OUTPUT_DIRECTORY } from "../shared/index.js";
|
|
5
8
|
export const upProject = async (inputPath, options = {}) => {
|
|
9
|
+
const resolvedOptions = await resolveDetachedDeploymentOptions(path.resolve(options.outputDirectory ?? DEFAULT_OUTPUT_DIRECTORY), {
|
|
10
|
+
authProfile: options.authProfile,
|
|
11
|
+
containerName: options.containerName,
|
|
12
|
+
deploymentName: options.deploymentName,
|
|
13
|
+
detach: options.detach,
|
|
14
|
+
dockerCommand: options.dockerCommand,
|
|
15
|
+
dockerContext: options.dockerContext,
|
|
16
|
+
dockerHost: options.dockerHost,
|
|
17
|
+
envFilePath: options.envFilePath,
|
|
18
|
+
imageTag: options.imageTag,
|
|
19
|
+
targetExecFile: options.targetExecFile
|
|
20
|
+
});
|
|
6
21
|
const buildResult = await buildProject(inputPath, {
|
|
7
22
|
buildRunner: options.buildRunner,
|
|
8
23
|
clean: options.clean,
|
|
9
24
|
dockerCommand: options.dockerCommand,
|
|
10
|
-
imageTag:
|
|
25
|
+
imageTag: resolvedOptions.imageTag,
|
|
11
26
|
outputDirectory: options.outputDirectory
|
|
12
27
|
});
|
|
13
|
-
const authProfile =
|
|
14
|
-
? await requireAuthProfile(
|
|
28
|
+
const authProfile = resolvedOptions.authProfile
|
|
29
|
+
? await requireAuthProfile(resolvedOptions.authProfile)
|
|
15
30
|
: null;
|
|
16
|
-
const
|
|
31
|
+
const imageTag = resolvedOptions.imageTag ?? buildResult.imageTag;
|
|
32
|
+
const invocation = await createDockerRunInvocation(buildResult, imageTag, {
|
|
17
33
|
authProfile,
|
|
18
|
-
containerName:
|
|
34
|
+
containerName: resolvedOptions.containerName,
|
|
19
35
|
detach: options.detach,
|
|
36
|
+
deploymentName: resolvedOptions.deploymentName,
|
|
20
37
|
dockerCommand: options.dockerCommand,
|
|
21
|
-
|
|
38
|
+
dockerContext: resolvedOptions.dockerContext,
|
|
39
|
+
dockerHost: resolvedOptions.dockerHost,
|
|
40
|
+
envFilePath: resolvedOptions.envFilePath
|
|
22
41
|
});
|
|
42
|
+
let runMetadata;
|
|
23
43
|
try {
|
|
24
|
-
await (options.runRunner ?? runDockerContainer)(invocation);
|
|
44
|
+
runMetadata = await (options.runRunner ?? runDockerContainer)(invocation);
|
|
25
45
|
}
|
|
26
46
|
finally {
|
|
27
47
|
if (!invocation.detach) {
|
|
28
48
|
await removeDirectory(invocation.supportDirectory);
|
|
29
49
|
}
|
|
30
50
|
}
|
|
51
|
+
const deploymentRecordPath = invocation.detach && invocation.deploymentName
|
|
52
|
+
? await writeDockerDeploymentRecordForRun({
|
|
53
|
+
authProfileName: authProfile?.name ?? null,
|
|
54
|
+
envFilePath: resolvedOptions.envFilePath,
|
|
55
|
+
imageTag,
|
|
56
|
+
invocation,
|
|
57
|
+
outputDirectory: buildResult.outputDirectory,
|
|
58
|
+
report: buildResult.report,
|
|
59
|
+
runMetadata: runMetadata ?? undefined,
|
|
60
|
+
targetExecFile: options.targetExecFile
|
|
61
|
+
})
|
|
62
|
+
: null;
|
|
31
63
|
return {
|
|
32
64
|
...buildResult,
|
|
33
65
|
authProfileName: authProfile?.name ?? null,
|
|
34
66
|
containerName: invocation.containerName,
|
|
67
|
+
deploymentRecordPath,
|
|
68
|
+
imageTag,
|
|
35
69
|
supportDirectory: invocation.supportDirectory
|
|
36
70
|
};
|
|
37
71
|
};
|
|
@@ -2,6 +2,7 @@ import path from "node:path";
|
|
|
2
2
|
import { SpawnfileError } from "../../shared/index.js";
|
|
3
3
|
import { buildCompilePlan } from "../buildCompilePlan.js";
|
|
4
4
|
import { resolveMoltnetRoomMemberships } from "../moltnetRoomMemberships.js";
|
|
5
|
+
import { buildDeclaredNodeView, buildRuntimeViews } from "./declarations.js";
|
|
5
6
|
const createNameCounts = (plan) => {
|
|
6
7
|
const counts = new Map();
|
|
7
8
|
for (const node of plan.nodes) {
|
|
@@ -30,7 +31,11 @@ const buildTreeNetworkSummaries = (node) => {
|
|
|
30
31
|
return [];
|
|
31
32
|
}
|
|
32
33
|
return (node.value.networks ?? []).map((network) => ({
|
|
34
|
+
agentRegistration: network.server?.auth.agent_registration,
|
|
33
35
|
authMode: network.server?.auth.mode,
|
|
36
|
+
consoleAnalytics: network.server?.mode === "managed"
|
|
37
|
+
? network.server.console?.analytics?.provider
|
|
38
|
+
: undefined,
|
|
34
39
|
debugEvents: network.server?.mode === "managed" ? network.server.debug_events : undefined,
|
|
35
40
|
directMessages: network.server?.mode === "managed" ? network.server.direct_messages : undefined,
|
|
36
41
|
expose: network.server?.mode === "managed" ? network.server.human_ingress : undefined,
|
|
@@ -38,11 +43,14 @@ const buildTreeNetworkSummaries = (node) => {
|
|
|
38
43
|
id: network.id,
|
|
39
44
|
name: network.name,
|
|
40
45
|
provider: network.provider,
|
|
46
|
+
publicRead: network.server?.auth.public_read,
|
|
41
47
|
serverMode: network.server?.mode,
|
|
42
48
|
url: network.server?.url,
|
|
43
49
|
rooms: network.rooms.map((room) => ({
|
|
44
50
|
declaredMembers: [...room.members],
|
|
45
|
-
id: room.id
|
|
51
|
+
id: room.id,
|
|
52
|
+
...(room.visibility ? { visibility: room.visibility } : {}),
|
|
53
|
+
...(room.write_policy ? { writePolicy: room.write_policy } : {})
|
|
46
54
|
}))
|
|
47
55
|
}));
|
|
48
56
|
};
|
|
@@ -75,7 +83,9 @@ const buildTreeNode = (node, nodeById, edgesBySource, nameCounts, ancestors = []
|
|
|
75
83
|
kind: node.kind,
|
|
76
84
|
name: node.value.name,
|
|
77
85
|
networks: buildTreeNetworkSummaries(node),
|
|
86
|
+
declared: buildDeclaredNodeView(node),
|
|
78
87
|
runtimeName: node.runtimeName,
|
|
88
|
+
slug: node.slug,
|
|
79
89
|
source: node.value.source
|
|
80
90
|
};
|
|
81
91
|
};
|
|
@@ -107,7 +117,11 @@ const toNetworkMemberView = (membership) => ({
|
|
|
107
117
|
});
|
|
108
118
|
const createNetworkKey = (provider, networkId) => `${provider}::${networkId}`;
|
|
109
119
|
const buildNetworkDeclaration = (teamNode, network, roomMemberships) => ({
|
|
120
|
+
agentRegistration: network.server?.auth.agent_registration,
|
|
110
121
|
authMode: network.server?.auth.mode,
|
|
122
|
+
consoleAnalytics: network.server?.mode === "managed"
|
|
123
|
+
? network.server.console?.analytics?.provider
|
|
124
|
+
: undefined,
|
|
111
125
|
debugEvents: network.server?.mode === "managed" ? network.server.debug_events : undefined,
|
|
112
126
|
declaringTeamName: teamNode.name,
|
|
113
127
|
declaringTeamSource: teamNode.source,
|
|
@@ -115,6 +129,7 @@ const buildNetworkDeclaration = (teamNode, network, roomMemberships) => ({
|
|
|
115
129
|
expose: network.server?.mode === "managed" ? network.server.human_ingress : undefined,
|
|
116
130
|
httpEnabled: network.server?.mode === "managed" ? network.server.human_ingress === true : false,
|
|
117
131
|
name: network.name,
|
|
132
|
+
publicRead: network.server?.auth.public_read,
|
|
118
133
|
serverMode: network.server?.mode,
|
|
119
134
|
url: network.server?.url,
|
|
120
135
|
rooms: network.rooms.map((room) => {
|
|
@@ -126,7 +141,9 @@ const buildNetworkDeclaration = (teamNode, network, roomMemberships) => ({
|
|
|
126
141
|
return {
|
|
127
142
|
declaredMembers: [...room.members],
|
|
128
143
|
id: room.id,
|
|
129
|
-
members: sortNetworkMembers(room.members, members)
|
|
144
|
+
members: sortNetworkMembers(room.members, members),
|
|
145
|
+
...(room.visibility ? { visibility: room.visibility } : {}),
|
|
146
|
+
...(room.write_policy ? { writePolicy: room.write_policy } : {})
|
|
130
147
|
};
|
|
131
148
|
})
|
|
132
149
|
});
|
|
@@ -151,7 +168,9 @@ const buildNetworks = (plan) => {
|
|
|
151
168
|
declaringTeamName: declaration.declaringTeamName,
|
|
152
169
|
declaringTeamSource: declaration.declaringTeamSource,
|
|
153
170
|
declarations: [declaration],
|
|
171
|
+
agentRegistration: declaration.agentRegistration,
|
|
154
172
|
authMode: declaration.authMode,
|
|
173
|
+
consoleAnalytics: declaration.consoleAnalytics,
|
|
155
174
|
debugEvents: declaration.debugEvents,
|
|
156
175
|
directMessages: declaration.directMessages,
|
|
157
176
|
expose: declaration.expose,
|
|
@@ -159,6 +178,7 @@ const buildNetworks = (plan) => {
|
|
|
159
178
|
id: network.id,
|
|
160
179
|
name: declaration.name,
|
|
161
180
|
provider: network.provider,
|
|
181
|
+
publicRead: declaration.publicRead,
|
|
162
182
|
serverMode: declaration.serverMode,
|
|
163
183
|
url: declaration.url,
|
|
164
184
|
rooms: declaration.rooms
|
|
@@ -171,11 +191,15 @@ const buildNetworks = (plan) => {
|
|
|
171
191
|
if (firstDeclaration) {
|
|
172
192
|
network.declaringTeamName = firstDeclaration.declaringTeamName;
|
|
173
193
|
network.declaringTeamSource = firstDeclaration.declaringTeamSource;
|
|
194
|
+
network.agentRegistration = firstDeclaration.agentRegistration;
|
|
174
195
|
network.authMode = firstDeclaration.authMode;
|
|
196
|
+
network.consoleAnalytics = firstDeclaration.consoleAnalytics;
|
|
197
|
+
network.debugEvents = firstDeclaration.debugEvents;
|
|
175
198
|
network.directMessages = firstDeclaration.directMessages;
|
|
176
199
|
network.expose = firstDeclaration.expose;
|
|
177
200
|
network.httpEnabled = firstDeclaration.httpEnabled;
|
|
178
201
|
network.name = firstDeclaration.name;
|
|
202
|
+
network.publicRead = firstDeclaration.publicRead;
|
|
179
203
|
network.serverMode = firstDeclaration.serverMode;
|
|
180
204
|
network.url = firstDeclaration.url;
|
|
181
205
|
network.rooms = firstDeclaration.rooms;
|
|
@@ -198,6 +222,6 @@ export const buildOrganizationView = async (inputPath) => {
|
|
|
198
222
|
networks: buildNetworks(plan),
|
|
199
223
|
projectRoot: path.dirname(plan.root),
|
|
200
224
|
root,
|
|
201
|
-
runtimes:
|
|
225
|
+
runtimes: buildRuntimeViews(plan)
|
|
202
226
|
};
|
|
203
227
|
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CompilePlan, CompilePlanNode } from "../types.js";
|
|
2
|
+
import type { OrganizationRuntimeView, OrganizationViewDeclaredSummary } from "./types.js";
|
|
3
|
+
export declare const buildDeclaredNodeView: (node: CompilePlanNode) => OrganizationViewDeclaredSummary;
|
|
4
|
+
export declare const buildRuntimeViews: (plan: CompilePlan) => OrganizationRuntimeView[];
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { resolveEffectiveModelTarget } from "../modelEnv.js";
|
|
2
|
+
import { listInteractiveSurfaceScopes } from "../interactiveSurfaceScopes.js";
|
|
3
|
+
const summarizeModel = (node) => {
|
|
4
|
+
if (node.value.kind !== "agent" || !node.value.execution?.model?.primary) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
const target = resolveEffectiveModelTarget(node.value.execution.model.primary, node.value.execution);
|
|
8
|
+
return {
|
|
9
|
+
authMethod: target.auth.method,
|
|
10
|
+
name: target.name,
|
|
11
|
+
provider: target.provider
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
const summarizeSchedule = (node) => {
|
|
15
|
+
if (node.value.kind !== "agent" || !node.value.schedule) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const schedule = node.value.schedule;
|
|
19
|
+
if (schedule.kind === "cron") {
|
|
20
|
+
return {
|
|
21
|
+
expression: schedule.cron,
|
|
22
|
+
kind: schedule.kind,
|
|
23
|
+
...(schedule.timezone ? { timezone: schedule.timezone } : {})
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (schedule.kind === "every") {
|
|
27
|
+
return {
|
|
28
|
+
expression: schedule.every,
|
|
29
|
+
kind: schedule.kind,
|
|
30
|
+
...(schedule.timezone ? { timezone: schedule.timezone } : {})
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return { kind: schedule.kind };
|
|
34
|
+
};
|
|
35
|
+
const surfaceSummaryFor = (name, surfaces) => {
|
|
36
|
+
if (!surfaces[name]) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const scopes = name === "moltnet"
|
|
40
|
+
? listInteractiveSurfaceScopes(surfaces).filter((scope) => scope.startsWith("moltnet:"))
|
|
41
|
+
: listInteractiveSurfaceScopes(surfaces).filter((scope) => scope === name);
|
|
42
|
+
return {
|
|
43
|
+
name,
|
|
44
|
+
scopes: scopes.length > 0 ? scopes : [name]
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
const summarizeSurfaces = (node) => {
|
|
48
|
+
const surfaces = node.value.kind === "agent" ? node.value.surfaces : undefined;
|
|
49
|
+
if (!surfaces) {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
return ["discord", "http", "moltnet", "slack", "telegram", "webhook", "whatsapp"]
|
|
53
|
+
.map((name) => surfaceSummaryFor(name, surfaces))
|
|
54
|
+
.filter((surface) => surface !== null);
|
|
55
|
+
};
|
|
56
|
+
const summarizePackages = (node) => {
|
|
57
|
+
const packages = node.value.kind === "agent"
|
|
58
|
+
? node.value.packages ?? []
|
|
59
|
+
: node.value.shared.packages ?? [];
|
|
60
|
+
return packages.map((pkg) => ({
|
|
61
|
+
id: pkg.id,
|
|
62
|
+
manager: pkg.manager,
|
|
63
|
+
name: pkg.name,
|
|
64
|
+
...(pkg.scope ? { scope: pkg.scope } : {}),
|
|
65
|
+
...(pkg.version ? { version: pkg.version } : {})
|
|
66
|
+
}));
|
|
67
|
+
};
|
|
68
|
+
const summarizeResources = (node) => (node.value.workspaceResources ?? []).map((resource) => ({
|
|
69
|
+
id: resource.id,
|
|
70
|
+
kind: resource.kind,
|
|
71
|
+
mode: resource.mode,
|
|
72
|
+
mount: resource.mount,
|
|
73
|
+
sharing: resource.sharing
|
|
74
|
+
}));
|
|
75
|
+
export const buildDeclaredNodeView = (node) => {
|
|
76
|
+
const skills = node.value.kind === "agent" ? node.value.skills : node.value.shared.skills;
|
|
77
|
+
const mcpServers = node.value.kind === "agent"
|
|
78
|
+
? node.value.mcpServers
|
|
79
|
+
: node.value.shared.mcpServers;
|
|
80
|
+
return {
|
|
81
|
+
docs: node.value.docs.map((doc) => ({ role: doc.role, source: doc.sourcePath })),
|
|
82
|
+
mcpServers: mcpServers.map((server) => ({
|
|
83
|
+
name: server.name,
|
|
84
|
+
transport: server.transport
|
|
85
|
+
})),
|
|
86
|
+
model: summarizeModel(node),
|
|
87
|
+
packages: summarizePackages(node),
|
|
88
|
+
policy: {
|
|
89
|
+
mode: node.value.policyMode,
|
|
90
|
+
onDegrade: node.value.policyOnDegrade
|
|
91
|
+
},
|
|
92
|
+
resources: summarizeResources(node),
|
|
93
|
+
schedule: summarizeSchedule(node),
|
|
94
|
+
skills: skills.map((skill) => ({
|
|
95
|
+
name: skill.name,
|
|
96
|
+
ref: skill.ref,
|
|
97
|
+
requiresMcp: [...skill.requiresMcp]
|
|
98
|
+
})),
|
|
99
|
+
surfaces: summarizeSurfaces(node)
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
export const buildRuntimeViews = (plan) => Object.entries(plan.runtimes)
|
|
103
|
+
.map(([name, runtime]) => ({ name, nodeIds: [...runtime.nodeIds].sort() }))
|
|
104
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
@@ -8,8 +8,7 @@ const formatPolicy = (member) => {
|
|
|
8
8
|
return [];
|
|
9
9
|
}
|
|
10
10
|
return [
|
|
11
|
-
member.policy.
|
|
12
|
-
member.policy.reply ? `reply=${member.policy.reply}` : undefined
|
|
11
|
+
member.policy.wake ? `wake=${member.policy.wake}` : undefined
|
|
13
12
|
].filter((entry) => entry !== undefined);
|
|
14
13
|
};
|
|
15
14
|
const formatMember = (member, options, projectRoot) => {
|
|
@@ -41,6 +40,8 @@ const formatNetwork = (network, options) => {
|
|
|
41
40
|
const getDeclarations = (network) => network.declarations ?? [
|
|
42
41
|
{
|
|
43
42
|
authMode: network.authMode,
|
|
43
|
+
agentRegistration: network.agentRegistration,
|
|
44
|
+
consoleAnalytics: network.consoleAnalytics,
|
|
44
45
|
declaringTeamName: network.declaringTeamName,
|
|
45
46
|
declaringTeamSource: network.declaringTeamSource,
|
|
46
47
|
debugEvents: network.debugEvents,
|
|
@@ -48,6 +49,7 @@ const getDeclarations = (network) => network.declarations ?? [
|
|
|
48
49
|
expose: network.expose,
|
|
49
50
|
httpEnabled: network.httpEnabled,
|
|
50
51
|
name: network.name,
|
|
52
|
+
publicRead: network.publicRead,
|
|
51
53
|
rooms: network.rooms,
|
|
52
54
|
serverMode: network.serverMode,
|
|
53
55
|
url: network.url
|
|
@@ -58,6 +60,9 @@ const formatDeclaration = (network, declaration, options, projectRoot) => {
|
|
|
58
60
|
declaration.serverMode ? `server=${declaration.serverMode}` : undefined,
|
|
59
61
|
declaration.url ? `url=${declaration.url}` : undefined,
|
|
60
62
|
declaration.authMode ? `auth=${declaration.authMode}` : undefined,
|
|
63
|
+
declaration.publicRead !== undefined ? `public_read=${declaration.publicRead}` : undefined,
|
|
64
|
+
declaration.agentRegistration ? `registration=${declaration.agentRegistration}` : undefined,
|
|
65
|
+
declaration.consoleAnalytics ? `analytics=${declaration.consoleAnalytics}` : undefined,
|
|
61
66
|
declaration.directMessages === false ? "dms=disabled" : undefined,
|
|
62
67
|
declaration.debugEvents === true ? "debug_events" : undefined,
|
|
63
68
|
declaration.expose === true || declaration.httpEnabled ? "human_ingress" : undefined
|
|
@@ -88,7 +93,11 @@ export const renderOrganizationNetworks = (view, options = {}) => {
|
|
|
88
93
|
const legacyDeclared = options.declared && !view.projectRoot
|
|
89
94
|
? ` room ${room.id} declared [${room.declaredMembers.join(", ")}]`
|
|
90
95
|
: "";
|
|
91
|
-
|
|
96
|
+
const roomMetadata = [
|
|
97
|
+
room.visibility ? `visibility=${room.visibility}` : undefined,
|
|
98
|
+
room.writePolicy ? `write=${room.writePolicy}` : undefined
|
|
99
|
+
].filter((entry) => entry !== undefined);
|
|
100
|
+
lines.push(`${declarationPrefix}${roomLast ? glyphs.last : glyphs.branch}#${room.id}${roomMetadata.length > 0 ? ` ${roomMetadata.join(" ")}` : ""}${legacyDeclared}`);
|
|
92
101
|
if (options.declared) {
|
|
93
102
|
const declaredMembers = room.declaredMembers.length > 0
|
|
94
103
|
? room.declaredMembers.join(", ")
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { formatSourceMeta } from "./sourcePaths.js";
|
|
2
2
|
const color = (value, code, options) => options.color ? `\u001b[${code}m${value}\u001b[0m` : value;
|
|
3
|
+
const formatAnnotations = (subjectKey, options) => {
|
|
4
|
+
const annotations = options.annotationFor?.(subjectKey) ?? [];
|
|
5
|
+
return annotations.length > 0 ? ` ${annotations.join(" ")}` : "";
|
|
6
|
+
};
|
|
3
7
|
const formatNode = (node, options, projectRoot) => {
|
|
4
8
|
const kind = color(node.kind, node.kind === "team" ? "36" : "32", options);
|
|
5
9
|
const metadata = node.kind === "team"
|
|
@@ -17,7 +21,7 @@ const formatNode = (node, options, projectRoot) => {
|
|
|
17
21
|
const details = metadata.filter((entry) => entry !== undefined);
|
|
18
22
|
const source = options.paths ? formatSourceMeta("source", node.source, projectRoot) : "";
|
|
19
23
|
const separator = details[0]?.startsWith("[") ? " " : " ";
|
|
20
|
-
return `${kind} ${node.displayName}${details.length > 0 ? `${separator}${details.join(" ")}` : ""}${source}`;
|
|
24
|
+
return `${kind} ${node.displayName}${details.length > 0 ? `${separator}${details.join(" ")}` : ""}${source}${formatAnnotations(node.id, options)}`;
|
|
21
25
|
};
|
|
22
26
|
const formatEdgeLabel = (edge) => edge.relation === "subagent"
|
|
23
27
|
? `subagent ${edge.label}`
|
|
@@ -28,14 +32,23 @@ const formatNetworkSummary = (network, options) => {
|
|
|
28
32
|
network.serverMode ? `server=${network.serverMode}` : undefined,
|
|
29
33
|
network.url ? `url=${network.url}` : undefined,
|
|
30
34
|
network.authMode ? `auth=${network.authMode}` : undefined,
|
|
35
|
+
network.publicRead !== undefined ? `public_read=${network.publicRead}` : undefined,
|
|
36
|
+
network.agentRegistration ? `registration=${network.agentRegistration}` : undefined,
|
|
37
|
+
network.consoleAnalytics ? `analytics=${network.consoleAnalytics}` : undefined,
|
|
31
38
|
network.directMessages === false ? "dms=disabled" : undefined,
|
|
32
39
|
network.debugEvents === true ? "debug_events" : undefined,
|
|
33
40
|
network.expose === true || network.httpEnabled ? "human_ingress" : undefined
|
|
34
41
|
].filter((entry) => entry !== undefined);
|
|
35
42
|
const rooms = network.rooms
|
|
36
|
-
.map((room) =>
|
|
43
|
+
.map((room) => {
|
|
44
|
+
const roomMetadata = [
|
|
45
|
+
room.visibility ? `visibility=${room.visibility}` : undefined,
|
|
46
|
+
room.writePolicy ? `write=${room.writePolicy}` : undefined
|
|
47
|
+
].filter((entry) => entry !== undefined);
|
|
48
|
+
return `${room.id}${roomMetadata.length > 0 ? ` ${roomMetadata.join(" ")}` : ""} [${room.declaredMembers.join(", ")}]`;
|
|
49
|
+
})
|
|
37
50
|
.join("; ");
|
|
38
|
-
return `network ${id} "${network.name}"${metadata.length > 0 ? ` ${metadata.join(" ")}` : ""}: ${rooms}`;
|
|
51
|
+
return `network ${id} "${network.name}"${metadata.length > 0 ? ` ${metadata.join(" ")}` : ""}: ${rooms}${formatAnnotations(`network:${network.id}`, options)}`;
|
|
39
52
|
};
|
|
40
53
|
const renderChildren = (node, options, projectRoot, prefix = "") => {
|
|
41
54
|
const glyphs = options.ascii
|
|
@@ -1,6 +1,63 @@
|
|
|
1
1
|
import type { ResolvedMoltnetRoomPolicy } from "../types.js";
|
|
2
|
+
export interface OrganizationViewDocSummary {
|
|
3
|
+
role: string;
|
|
4
|
+
source: string;
|
|
5
|
+
}
|
|
6
|
+
export interface OrganizationViewSkillSummary {
|
|
7
|
+
name: string;
|
|
8
|
+
ref: string;
|
|
9
|
+
requiresMcp: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface OrganizationViewResourceSummary {
|
|
12
|
+
id: string;
|
|
13
|
+
kind: "git" | "volume";
|
|
14
|
+
mode: "mutable" | "readonly";
|
|
15
|
+
mount: string;
|
|
16
|
+
sharing: "per_agent" | "team";
|
|
17
|
+
}
|
|
18
|
+
export interface OrganizationViewPackageSummary {
|
|
19
|
+
id: string;
|
|
20
|
+
manager: string;
|
|
21
|
+
name: string;
|
|
22
|
+
scope?: string;
|
|
23
|
+
version?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface OrganizationViewMcpSummary {
|
|
26
|
+
name: string;
|
|
27
|
+
transport: "sse" | "stdio" | "streamable_http";
|
|
28
|
+
}
|
|
29
|
+
export interface OrganizationViewModelSummary {
|
|
30
|
+
authMethod: string;
|
|
31
|
+
name: string;
|
|
32
|
+
provider: string;
|
|
33
|
+
}
|
|
34
|
+
export interface OrganizationViewScheduleSummary {
|
|
35
|
+
expression?: string;
|
|
36
|
+
kind: "cron" | "disabled" | "every";
|
|
37
|
+
timezone?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface OrganizationViewSurfaceSummary {
|
|
40
|
+
name: string;
|
|
41
|
+
scopes: string[];
|
|
42
|
+
}
|
|
43
|
+
export interface OrganizationViewPolicySummary {
|
|
44
|
+
mode: string | null;
|
|
45
|
+
onDegrade: string | null;
|
|
46
|
+
}
|
|
47
|
+
export interface OrganizationViewDeclaredSummary {
|
|
48
|
+
docs: OrganizationViewDocSummary[];
|
|
49
|
+
mcpServers: OrganizationViewMcpSummary[];
|
|
50
|
+
model: OrganizationViewModelSummary | null;
|
|
51
|
+
packages: OrganizationViewPackageSummary[];
|
|
52
|
+
policy: OrganizationViewPolicySummary;
|
|
53
|
+
resources: OrganizationViewResourceSummary[];
|
|
54
|
+
schedule: OrganizationViewScheduleSummary | null;
|
|
55
|
+
skills: OrganizationViewSkillSummary[];
|
|
56
|
+
surfaces: OrganizationViewSurfaceSummary[];
|
|
57
|
+
}
|
|
2
58
|
export interface OrganizationViewTreeNode {
|
|
3
59
|
children: OrganizationViewTreeEdge[];
|
|
60
|
+
declared?: OrganizationViewDeclaredSummary;
|
|
4
61
|
displayName: string;
|
|
5
62
|
external?: string[];
|
|
6
63
|
id: string;
|
|
@@ -10,14 +67,19 @@ export interface OrganizationViewTreeNode {
|
|
|
10
67
|
name: string;
|
|
11
68
|
networks?: OrganizationTreeNetworkSummary[];
|
|
12
69
|
runtimeName: string | null;
|
|
70
|
+
slug?: string;
|
|
13
71
|
source: string;
|
|
14
72
|
}
|
|
15
73
|
export interface OrganizationTreeNetworkRoomSummary {
|
|
16
74
|
declaredMembers: string[];
|
|
17
75
|
id: string;
|
|
76
|
+
visibility?: "public" | "private";
|
|
77
|
+
writePolicy?: "members" | "operators" | "registered_agents";
|
|
18
78
|
}
|
|
19
79
|
export interface OrganizationTreeNetworkSummary {
|
|
80
|
+
agentRegistration?: "disabled" | "open" | "token";
|
|
20
81
|
authMode?: "bearer" | "none" | "open";
|
|
82
|
+
consoleAnalytics?: string;
|
|
21
83
|
debugEvents?: boolean;
|
|
22
84
|
directMessages?: boolean;
|
|
23
85
|
expose?: boolean;
|
|
@@ -25,6 +87,7 @@ export interface OrganizationTreeNetworkSummary {
|
|
|
25
87
|
id: string;
|
|
26
88
|
name: string;
|
|
27
89
|
provider: "moltnet";
|
|
90
|
+
publicRead?: boolean;
|
|
28
91
|
serverMode?: "external" | "managed";
|
|
29
92
|
url?: string;
|
|
30
93
|
rooms: OrganizationTreeNetworkRoomSummary[];
|
|
@@ -48,7 +111,9 @@ export interface OrganizationNetworkMemberView {
|
|
|
48
111
|
representativePath?: string[];
|
|
49
112
|
}
|
|
50
113
|
export interface OrganizationNetworkDeclarationView {
|
|
114
|
+
agentRegistration?: "disabled" | "open" | "token";
|
|
51
115
|
authMode?: "bearer" | "none" | "open";
|
|
116
|
+
consoleAnalytics?: string;
|
|
52
117
|
debugEvents?: boolean;
|
|
53
118
|
declaringTeamName: string;
|
|
54
119
|
declaringTeamSource: string;
|
|
@@ -56,6 +121,7 @@ export interface OrganizationNetworkDeclarationView {
|
|
|
56
121
|
expose?: boolean;
|
|
57
122
|
httpEnabled?: boolean;
|
|
58
123
|
name: string;
|
|
124
|
+
publicRead?: boolean;
|
|
59
125
|
rooms: OrganizationNetworkRoomView[];
|
|
60
126
|
serverMode?: "external" | "managed";
|
|
61
127
|
url?: string;
|
|
@@ -64,9 +130,13 @@ export interface OrganizationNetworkRoomView {
|
|
|
64
130
|
declaredMembers: string[];
|
|
65
131
|
id: string;
|
|
66
132
|
members: OrganizationNetworkMemberView[];
|
|
133
|
+
visibility?: "public" | "private";
|
|
134
|
+
writePolicy?: "members" | "operators" | "registered_agents";
|
|
67
135
|
}
|
|
68
136
|
export interface OrganizationNetworkView {
|
|
137
|
+
agentRegistration?: "disabled" | "open" | "token";
|
|
69
138
|
authMode?: "bearer" | "none" | "open";
|
|
139
|
+
consoleAnalytics?: string;
|
|
70
140
|
debugEvents?: boolean;
|
|
71
141
|
declaringTeamName: string;
|
|
72
142
|
declaringTeamSource: string;
|
|
@@ -76,11 +146,16 @@ export interface OrganizationNetworkView {
|
|
|
76
146
|
id: string;
|
|
77
147
|
name: string;
|
|
78
148
|
provider: "moltnet";
|
|
149
|
+
publicRead?: boolean;
|
|
79
150
|
rooms: OrganizationNetworkRoomView[];
|
|
80
151
|
serverMode?: "external" | "managed";
|
|
81
152
|
url?: string;
|
|
82
153
|
declarations?: OrganizationNetworkDeclarationView[];
|
|
83
154
|
}
|
|
155
|
+
export interface OrganizationRuntimeView {
|
|
156
|
+
name: string;
|
|
157
|
+
nodeIds: string[];
|
|
158
|
+
}
|
|
84
159
|
export interface OrganizationView {
|
|
85
160
|
contexts: [];
|
|
86
161
|
diagnostics: [];
|
|
@@ -88,9 +163,10 @@ export interface OrganizationView {
|
|
|
88
163
|
networks: OrganizationNetworkView[];
|
|
89
164
|
projectRoot?: string;
|
|
90
165
|
root: OrganizationViewTreeNode;
|
|
91
|
-
runtimes: [];
|
|
166
|
+
runtimes: OrganizationRuntimeView[];
|
|
92
167
|
}
|
|
93
168
|
export interface RenderOrganizationViewOptions {
|
|
169
|
+
annotationFor?: (subjectKey: string) => string[];
|
|
94
170
|
ascii?: boolean;
|
|
95
171
|
color?: boolean;
|
|
96
172
|
declared?: boolean;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { DeploymentRecord } from "./record.js";
|
|
2
|
+
export type DockerInspectExecFile = (file: string, args: string[], options: {
|
|
3
|
+
timeout: number;
|
|
4
|
+
}) => Promise<{
|
|
5
|
+
stderr: string;
|
|
6
|
+
stdout: string;
|
|
7
|
+
}>;
|
|
8
|
+
export interface DockerUnitInspection {
|
|
9
|
+
containerId: string | null;
|
|
10
|
+
drift: string[];
|
|
11
|
+
exists: boolean | null;
|
|
12
|
+
exitCode: number | null;
|
|
13
|
+
finishedAt: string | null;
|
|
14
|
+
imageId: string | null;
|
|
15
|
+
message: string;
|
|
16
|
+
restartCount: number | null;
|
|
17
|
+
running: boolean | null;
|
|
18
|
+
severity: "error" | "ok" | "unknown" | "warn";
|
|
19
|
+
startedAt: string | null;
|
|
20
|
+
status: string | null;
|
|
21
|
+
unitId: string;
|
|
22
|
+
}
|
|
23
|
+
export type DockerInspectionResult = Map<string, DockerUnitInspection>;
|
|
24
|
+
export interface DockerInspectOptions {
|
|
25
|
+
dockerCommand?: string;
|
|
26
|
+
execFile?: DockerInspectExecFile;
|
|
27
|
+
timeoutMs?: number;
|
|
28
|
+
}
|
|
29
|
+
export declare const inspectDockerDeployment: (record: DeploymentRecord, options?: DockerInspectOptions) => Promise<DockerInspectionResult>;
|