nolo-cli 0.1.44 → 0.1.46
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 +258 -102
- package/index.js +73433 -0
- package/package.json +10 -633
- package/LICENSE +0 -21
- package/agent-runtime/agentConfigOptions.ts +0 -12
- package/agent-runtime/agentRecordConfig.ts +0 -101
- package/agent-runtime/agentRecordKeys.ts +0 -14
- package/agent-runtime/agentThread.ts +0 -222
- package/agent-runtime/agentThreadAdmission.ts +0 -74
- package/agent-runtime/dialogMessageRecord.ts +0 -16
- package/agent-runtime/dialogWritePlan.ts +0 -211
- package/agent-runtime/hostAdapter.ts +0 -81
- package/agent-runtime/hybridRecordStore.ts +0 -170
- package/agent-runtime/index.ts +0 -184
- package/agent-runtime/localDialogRead.ts +0 -23
- package/agent-runtime/localLoop.ts +0 -334
- package/agent-runtime/localToolPolicy.ts +0 -179
- package/agent-runtime/localWorkspaceTools.ts +0 -2310
- package/agent-runtime/noloWorkspaceTools.ts +0 -390
- package/agent-runtime/openAiCompatibleProvider.ts +0 -74
- package/agent-runtime/openAiCompatibleProviderConfig.ts +0 -27
- package/agent-runtime/platformChatProvider.ts +0 -229
- package/agent-runtime/providerResolution.ts +0 -302
- package/agent-runtime/runtimeDecision.ts +0 -70
- package/agent-runtime/runtimeFacts.ts +0 -40
- package/agent-runtime/runtimeToolPolicy.ts +0 -191
- package/agent-runtime/runtimeToolSurface.ts +0 -199
- package/agent-runtime/shellCommandPolicy.ts +0 -120
- package/agent-runtime/types.ts +0 -137
- package/agentAliases.ts +0 -110
- package/agentCommandSupport.ts +0 -81
- package/agentInternalCommandEntries.ts +0 -44
- package/agentListCommands.ts +0 -185
- package/agentListHelpers.ts +0 -242
- package/agentMachineCommands.ts +0 -403
- package/agentPullCommand.ts +0 -142
- package/agentRecordCommands.ts +0 -226
- package/agentRecordHelpers.ts +0 -571
- package/agentRunCommand.ts +0 -556
- package/agentRuntimeCommands.ts +0 -7
- package/agentRuntimeLocal.ts +0 -45
- package/ai/agent/_executeModel.ts +0 -146
- package/ai/agent/agentSlice.ts +0 -557
- package/ai/agent/appWorkingMemory.ts +0 -126
- package/ai/agent/buildEditingContext.ts +0 -378
- package/ai/agent/buildSystemPrompt.ts +0 -599
- package/ai/agent/canvasEditingContext.ts +0 -49
- package/ai/agent/cleanAgentMessages.ts +0 -140
- package/ai/agent/cliChatClient.ts +0 -153
- package/ai/agent/cliExecutor.ts +0 -1465
- package/ai/agent/cliPrompt.ts +0 -10
- package/ai/agent/contextCompiler.ts +0 -107
- package/ai/agent/contextLayerContract.ts +0 -44
- package/ai/agent/createAgentSchema.ts +0 -272
- package/ai/agent/currentTimeContext.ts +0 -65
- package/ai/agent/executeToolCall.ts +0 -58
- package/ai/agent/fetchAgentContexts.ts +0 -42
- package/ai/agent/generatePrompt.ts +0 -3
- package/ai/agent/getFullChatContextKeys.ts +0 -168
- package/ai/agent/guidedCreation/capabilities.ts +0 -84
- package/ai/agent/guidedCreation/types.ts +0 -38
- package/ai/agent/isLiveAudioOnlyAgent.ts +0 -26
- package/ai/agent/liveAudioModel.ts +0 -2
- package/ai/agent/machineRunPermissions.ts +0 -113
- package/ai/agent/pageBuilderHandoffRules.ts +0 -75
- package/ai/agent/persistMessageWithFixedId.ts +0 -37
- package/ai/agent/planSlice.ts +0 -259
- package/ai/agent/referenceUtils.ts +0 -229
- package/ai/agent/runAgentBackground.ts +0 -310
- package/ai/agent/runAgentClientLoop.ts +0 -164
- package/ai/agent/runtimeGuidance.ts +0 -116
- package/ai/agent/serverOrigin.ts +0 -7
- package/ai/agent/startParallelAgentStreams.ts +0 -424
- package/ai/agent/startupProtocol.ts +0 -53
- package/ai/agent/streamAgentChatTurn.ts +0 -2135
- package/ai/agent/streamAgentChatTurnUtils.ts +0 -923
- package/ai/agent/toolFailureGuard.ts +0 -99
- package/ai/agent/types.ts +0 -73
- package/ai/agent/utils/imageOutput.ts +0 -37
- package/ai/agent/utils/publicImageAgentMode.ts +0 -26
- package/ai/agent.ts +0 -2
- package/ai/ai.locale.ts +0 -1165
- package/ai/chat/accumulateToolCallChunks.ts +0 -126
- package/ai/chat/fetchUtils.ts +0 -143
- package/ai/chat/inlineImageUrlsForCustomProvider.ts +0 -122
- package/ai/chat/parseApiError.ts +0 -67
- package/ai/chat/parseMultilineSSE.ts +0 -95
- package/ai/chat/sendOpenAICompletionsRequest.ts +0 -921
- package/ai/chat/sendOpenAIResponseRequest.ts +0 -720
- package/ai/chat/serverProxyRetry.ts +0 -102
- package/ai/chat/shouldUseServerProxy.ts +0 -18
- package/ai/chat/streamRetry.ts +0 -46
- package/ai/chat/updateTotalUsage.ts +0 -89
- package/ai/context/buildReferenceContext.ts +0 -437
- package/ai/context/retention.ts +0 -165
- package/ai/context/tokenUtils.ts +0 -78
- package/ai/index.ts +0 -1
- package/ai/llm/agentCapabilities.ts +0 -74
- package/ai/llm/deepinfra.ts +0 -79
- package/ai/llm/fireworks.ts +0 -68
- package/ai/llm/generateRequestBody.ts +0 -165
- package/ai/llm/getModelContextWindow.ts +0 -93
- package/ai/llm/getPricing.ts +0 -252
- package/ai/llm/imagePricing.ts +0 -66
- package/ai/llm/isResponseAPIModel.ts +0 -13
- package/ai/llm/kimi.ts +0 -22
- package/ai/llm/mimo.ts +0 -99
- package/ai/llm/mistral.ts +0 -21
- package/ai/llm/models.ts +0 -45
- package/ai/llm/openrouterModels.ts +0 -31
- package/ai/llm/providers.ts +0 -313
- package/ai/llm/reasoningModels.ts +0 -27
- package/ai/llm/types.ts +0 -82
- package/ai/llm/usageRequestOptions.ts +0 -59
- package/ai/memory/policy.ts +0 -49
- package/ai/memory/queryShared.ts +0 -167
- package/ai/memory/recentRelationshipRecap.ts +0 -251
- package/ai/memory/remember.ts +0 -111
- package/ai/memory/scope.ts +0 -74
- package/ai/memory/store.ts +0 -20
- package/ai/memory/storeShared.ts +0 -76
- package/ai/memory/types.ts +0 -52
- package/ai/memory/understanding.ts +0 -341
- package/ai/memory/understandingGreeting.ts +0 -264
- package/ai/policy/personalizationDialog.ts +0 -333
- package/ai/policy/runtimePolicy.ts +0 -526
- package/ai/policy/selfUpdateFields.ts +0 -48
- package/ai/policy/types.ts +0 -64
- package/ai/skills/referenceRuntime.ts +0 -274
- package/ai/skills/skillDiagnostics.ts +0 -251
- package/ai/skills/skillDocBuilder.ts +0 -139
- package/ai/skills/skillDocProtocol.ts +0 -526
- package/ai/skills/skillSummaryMarker.ts +0 -26
- package/ai/token/calculatePrice.ts +0 -576
- package/ai/token/missingUsageEstimate.ts +0 -42
- package/ai/token/normalizeUsage.ts +0 -124
- package/ai/token/openaiImageGenerationUsage.ts +0 -56
- package/ai/token/prepareTokenUsageData.ts +0 -93
- package/ai/token/resolveBillingTarget.ts +0 -52
- package/ai/token/saveTokenRecord.ts +0 -53
- package/ai/token/types.ts +0 -103
- package/ai/tools/agent/agentTools.ts +0 -214
- package/ai/tools/agent/agentUpdateShared.ts +0 -311
- package/ai/tools/agent/callAgentTool.ts +0 -139
- package/ai/tools/agent/createAgentTool.ts +0 -512
- package/ai/tools/agent/createDialogTool.ts +0 -69
- package/ai/tools/agent/createSkillAgentTool.ts +0 -62
- package/ai/tools/agent/parallelBudget.ts +0 -221
- package/ai/tools/agent/prepareAgentDraftTool.ts +0 -159
- package/ai/tools/agent/presets/appBuilderPreset.ts +0 -154
- package/ai/tools/agent/runLlmTool.ts +0 -96
- package/ai/tools/agent/runStreamingAgentTool.ts +0 -73
- package/ai/tools/agent/skillAgentArgs.ts +0 -106
- package/ai/tools/agent/startAgentDialogTool.ts +0 -54
- package/ai/tools/agent/streamParallelAgentsTool.ts +0 -123
- package/ai/tools/agent/updateAgentTool.ts +0 -96
- package/ai/tools/agent/updateSelfTool.ts +0 -113
- package/ai/tools/amazonProductScraperTool.ts +0 -86
- package/ai/tools/apifyActorClient.ts +0 -45
- package/ai/tools/appEditGuard.ts +0 -372
- package/ai/tools/appReadSnapshot.ts +0 -153
- package/ai/tools/appTools.ts +0 -1549
- package/ai/tools/applyEditTool.ts +0 -259
- package/ai/tools/applyLineEditsTool.ts +0 -315
- package/ai/tools/browserTools/click.ts +0 -33
- package/ai/tools/browserTools/closeSession.ts +0 -29
- package/ai/tools/browserTools/common.ts +0 -27
- package/ai/tools/browserTools/openSession.ts +0 -48
- package/ai/tools/browserTools/readContent.ts +0 -38
- package/ai/tools/browserTools/selectOption.ts +0 -46
- package/ai/tools/browserTools/typeText.ts +0 -42
- package/ai/tools/category/createCategoryTool.ts +0 -66
- package/ai/tools/category/queryContentsByCategoryTool.ts +0 -69
- package/ai/tools/category/updateContentCategoryTool.ts +0 -75
- package/ai/tools/cfBrowserTools.ts +0 -319
- package/ai/tools/cfSpeechToTextTool.ts +0 -49
- package/ai/tools/checkEnvTool.ts +0 -102
- package/ai/tools/cloudflareCrawlTool.ts +0 -289
- package/ai/tools/codeSearchTool.ts +0 -123
- package/ai/tools/codeTools.ts +0 -101
- package/ai/tools/convertMarxistsBookTool.ts +0 -103
- package/ai/tools/createDocTool.ts +0 -132
- package/ai/tools/createSkillDocTool.ts +0 -155
- package/ai/tools/createWorkflowTool.ts +0 -154
- package/ai/tools/delayTool.ts +0 -31
- package/ai/tools/deleteSpacesTool.ts +0 -325
- package/ai/tools/deleteSpacesToolModel.ts +0 -159
- package/ai/tools/devReloadUtils.ts +0 -29
- package/ai/tools/dialogMessageSearch.ts +0 -137
- package/ai/tools/doctorSkillTool.ts +0 -72
- package/ai/tools/ecommerceScraperTool.ts +0 -86
- package/ai/tools/emailTools.ts +0 -549
- package/ai/tools/evalSkillTool.ts +0 -92
- package/ai/tools/exaSearchTool.ts +0 -63
- package/ai/tools/execShellTool.ts +0 -266
- package/ai/tools/executeSqlTool.ts +0 -192
- package/ai/tools/fetchWebpageSupport.ts +0 -333
- package/ai/tools/fetchWebpageTool.ts +0 -97
- package/ai/tools/geminiImagePreviewTool.ts +0 -386
- package/ai/tools/generateDocxTool.ts +0 -215
- package/ai/tools/googleSearchScraperTool.ts +0 -106
- package/ai/tools/importDataTool.ts +0 -133
- package/ai/tools/importSkillTool.ts +0 -162
- package/ai/tools/index.ts +0 -2290
- package/ai/tools/jdProductScraperTool.ts +0 -821
- package/ai/tools/listUserSpacesTool.ts +0 -113
- package/ai/tools/localFilesTool.ts +0 -276
- package/ai/tools/marxistsOfflineBook.ts +0 -253
- package/ai/tools/modelUsageTools.ts +0 -206
- package/ai/tools/noloWorkspaceReadTools.ts +0 -467
- package/ai/tools/olmOcrTool.ts +0 -33
- package/ai/tools/openaiImageTool.ts +0 -267
- package/ai/tools/prepareTools.ts +0 -193
- package/ai/tools/readDocTool.ts +0 -88
- package/ai/tools/readFileTool.ts +0 -214
- package/ai/tools/readTool.ts +0 -194
- package/ai/tools/readXPostTool.ts +0 -229
- package/ai/tools/readXhsProfileTool.ts +0 -638
- package/ai/tools/rememberMemoryTool.ts +0 -84
- package/ai/tools/remotionVideoTool.ts +0 -151
- package/ai/tools/searchDialogMessagesTool.ts +0 -222
- package/ai/tools/searchWorkspaceTool.ts +0 -259
- package/ai/tools/skillFollowup.ts +0 -86
- package/ai/tools/surfWeatherTool.ts +0 -169
- package/ai/tools/table/addTableRowTool.ts +0 -217
- package/ai/tools/table/createTableTool.ts +0 -326
- package/ai/tools/table/rowTools.ts +0 -386
- package/ai/tools/table/schemaTools.ts +0 -244
- package/ai/tools/table/shareTableTool.ts +0 -148
- package/ai/tools/table/toolShared.ts +0 -129
- package/ai/tools/taobaoTmallProductScraperTool.ts +0 -49
- package/ai/tools/toolApiClient.ts +0 -279
- package/ai/tools/toolNameAliases.ts +0 -70
- package/ai/tools/toolPacks.ts +0 -19
- package/ai/tools/toolResultError.ts +0 -42
- package/ai/tools/toolRunSlice.ts +0 -303
- package/ai/tools/toolSchemaCompatibility.ts +0 -53
- package/ai/tools/uiAskChoiceTool.ts +0 -104
- package/ai/tools/updateContentTitleTool.ts +0 -84
- package/ai/tools/updateDocTool.ts +0 -105
- package/ai/tools/updateUserPreferenceProfileTool.ts +0 -153
- package/ai/tools/wereadGatewayTool.ts +0 -152
- package/ai/tools/whisperTool.ts +0 -76
- package/ai/tools/writeFileTool.ts +0 -213
- package/ai/tools/youtubeScraperTool.ts +0 -116
- package/ai/tools/ziweiChartTool.ts +0 -678
- package/ai/types.ts +0 -58
- package/ai/workflow/workflowExecutor.ts +0 -323
- package/ai/workflow/workflowSlice.ts +0 -73
- package/ai/workflow/workflowTypes.ts +0 -106
- package/app/actions/syncAppRecord.ts +0 -73
- package/app/constants/animationSets.ts +0 -21
- package/app/constants/appEditor.ts +0 -99
- package/app/favorite/deletedFavoriteProjection.ts +0 -31
- package/app/favorite/favoriteSlice.ts +0 -690
- package/app/favorite/type.ts +0 -43
- package/app/hooks/deleteDbKey.ts +0 -254
- package/app/i18n/client.ts +0 -13
- package/app/i18n/i18n.base.ts +0 -14
- package/app/i18n/i18n.config.ts +0 -77
- package/app/i18n/index.ts +0 -15
- package/app/i18n/mapLanguage.ts +0 -11
- package/app/i18n/translations/appBuilder.locale.ts +0 -453
- package/app/i18n/translations/error.locale.ts +0 -246
- package/app/i18n/translations/interface.locale.ts +0 -2206
- package/app/i18n/translations/pricing.locale.ts +0 -397
- package/app/i18n/translations/privacy.locale.ts +0 -168
- package/app/i18n/translations/seo.locale.ts +0 -129
- package/app/i18n/translations/terms.locale.ts +0 -124
- package/app/i18n/types.ts +0 -6
- package/app/notifications/model.ts +0 -77
- package/app/notifications/notificationSlice.ts +0 -141
- package/app/reducer.ts +0 -36
- package/app/settings/dbActionThunks.ts +0 -34
- package/app/settings/defaultSpacePreference.ts +0 -87
- package/app/settings/settingSlice.tsx +0 -1212
- package/app/settings/settingsRecord.ts +0 -8
- package/app/stateViews/runtime.ts +0 -90
- package/app/store.ts +0 -55
- package/app/theme/colors.ts +0 -280
- package/app/theme/fontPreference.ts +0 -77
- package/app/theme/theme.config.ts +0 -120
- package/app/theme/themeModeBootstrap.ts +0 -123
- package/app/types/appSummary.ts +0 -118
- package/app/types.ts +0 -358
- package/app/utils/appKeys.ts +0 -55
- package/app/utils/async.ts +0 -28
- package/app/utils/desktopAgentRuntimeTurnClient.ts +0 -75
- package/app/utils/env.ts +0 -17
- package/app/utils/fileUtils.ts +0 -229
- package/app/utils/imageUtils.ts +0 -274
- package/app/utils/myContentItems.ts +0 -317
- package/app/utils/retryAfter.ts +0 -36
- package/app/utils/retryFetch.ts +0 -61
- package/app/utils/toast.ts +0 -3
- package/auth/action/signUpAction.ts +0 -227
- package/auth/adminPermissions.ts +0 -78
- package/auth/authSlice.ts +0 -531
- package/auth/client/loginRequest.ts +0 -14
- package/auth/resetAuthScopedClientState.ts +0 -27
- package/auth/routes.ts +0 -183
- package/auth/token.ts +0 -63
- package/auth/types.ts +0 -40
- package/authCommands.ts +0 -230
- package/chat/chat.locale.ts +0 -817
- package/chat/dialog/actions/addCybotAction.ts +0 -52
- package/chat/dialog/actions/addReferenceKeysAction.ts +0 -62
- package/chat/dialog/actions/builtinDialogLlm.ts +0 -35
- package/chat/dialog/actions/cleanupCliSession.ts +0 -40
- package/chat/dialog/actions/createDialogAction.ts +0 -379
- package/chat/dialog/actions/createScheduledTaskAction.ts +0 -78
- package/chat/dialog/actions/handleSendMessageAction.ts +0 -202
- package/chat/dialog/actions/handleSendMessageResolver.ts +0 -27
- package/chat/dialog/actions/removeCybotAction.ts +0 -6
- package/chat/dialog/actions/removeDialogAgentAction.ts +0 -44
- package/chat/dialog/actions/replacePrimaryCybotAction.ts +0 -6
- package/chat/dialog/actions/setPrimaryDialogAgentAction.ts +0 -52
- package/chat/dialog/actions/updateDialogSummaryAction.ts +0 -430
- package/chat/dialog/actions/updateDialogTitleAction.ts +0 -151
- package/chat/dialog/actions/updateDialogTitlePolicy.ts +0 -30
- package/chat/dialog/actions/updateTokensAction.ts +0 -233
- package/chat/dialog/dialogAgents.ts +0 -72
- package/chat/dialog/dialogAttachmentCleanup.ts +0 -135
- package/chat/dialog/dialogSlice.ts +0 -985
- package/chat/dialog/dialogTitle.ts +0 -81
- package/chat/dialog/dialogTokenStats.ts +0 -12
- package/chat/dialog/dialogUrl.ts +0 -6
- package/chat/dialog/goal.ts +0 -108
- package/chat/dialog/objectAssistantRegistry.ts +0 -286
- package/chat/dialog/schedule.ts +0 -17
- package/chat/messages/activityCompletion.ts +0 -97
- package/chat/messages/fetchAndCacheMessages.ts +0 -119
- package/chat/messages/fetchConvMsgs.ts +0 -51
- package/chat/messages/fetchMessages.ts +0 -84
- package/chat/messages/fileUrl.ts +0 -13
- package/chat/messages/imagePayloadPersistence.ts +0 -22
- package/chat/messages/messageAgent.ts +0 -8
- package/chat/messages/messageContent.ts +0 -203
- package/chat/messages/messageContract.ts +0 -88
- package/chat/messages/messageSlice.ts +0 -1386
- package/chat/messages/toolThunks.ts +0 -646
- package/chat/messages/types.ts +0 -192
- package/chat/messages/web/toolDisplayName.ts +0 -686
- package/cli/agentAliases.ts +0 -110
- package/cli/agentCommandSupport.ts +0 -81
- package/cli/agentInternalCommandEntries.ts +0 -44
- package/cli/agentListCommands.ts +0 -185
- package/cli/agentListHelpers.ts +0 -242
- package/cli/agentMachineCommands.ts +0 -403
- package/cli/agentPullCommand.ts +0 -142
- package/cli/agentRecordCommands.ts +0 -226
- package/cli/agentRecordHelpers.ts +0 -571
- package/cli/agentRunCommand.ts +0 -556
- package/cli/agentRuntimeLocal.ts +0 -45
- package/cli/authCommands.ts +0 -230
- package/cli/cliCommandAdapters.ts +0 -28
- package/cli/cliCommandDispatch.ts +0 -66
- package/cli/cliCommandFactories.ts +0 -66
- package/cli/cliCommandTypes.ts +0 -49
- package/cli/cliEnvHelpers.ts +0 -116
- package/cli/cliSpaceHelpers.ts +0 -39
- package/cli/client/agentConfigResolver.ts +0 -1
- package/cli/client/agentRun.ts +0 -795
- package/cli/client/compactDialog.ts +0 -222
- package/cli/client/hybridRecordStore.ts +0 -52
- package/cli/client/localAgentRecords.ts +0 -7
- package/cli/client/localDialogRecords.ts +0 -30
- package/cli/client/localProviderResolver.ts +0 -1
- package/cli/client/localRuntimeAdapter.ts +0 -1104
- package/cli/client/localToolPolicy.ts +0 -8
- package/cli/client/profileConfig.ts +0 -101
- package/cli/client/streamingOutput.ts +0 -38
- package/cli/commandRegistry.ts +0 -98
- package/cli/connectorRunArtifact.ts +0 -120
- package/cli/connectorWebSocketTarget.ts +0 -112
- package/cli/defaultServer.ts +0 -1
- package/cli/dialogAttachmentCleanup.ts +0 -151
- package/cli/dialogCommands.ts +0 -1120
- package/cli/dialogInternalCommandEntries.ts +0 -17
- package/cli/docCreateCommands.ts +0 -345
- package/cli/docInternalCommandEntries.ts +0 -11
- package/cli/docPageHelpers.ts +0 -80
- package/cli/docSkillHelpers.ts +0 -67
- package/cli/docSpaceHelpers.ts +0 -46
- package/cli/globalRecordOperations.ts +0 -258
- package/cli/internalCommandEntries.ts +0 -18
- package/cli/localRuntimeAuthority.ts +0 -182
- package/cli/localRuntimeDb.ts +0 -26
- package/cli/machineCommands.ts +0 -307
- package/cli/machineDaemonCommands.ts +0 -185
- package/cli/machineHeartbeatCommands.ts +0 -30
- package/cli/machineStatusCommands.ts +0 -95
- package/cli/machineWatchCommands.ts +0 -41
- package/cli/machineWsPromptMaterialization.ts +0 -89
- package/cli/machineWsRunDispatch.ts +0 -695
- package/cli/machineWsSession.ts +0 -213
- package/cli/memoryCommands.ts +0 -253
- package/cli/memoryInternalCommandEntries.ts +0 -9
- package/cli/offlineMarxistsAgentCommand.ts +0 -316
- package/cli/qoderUsageProbe.ts +0 -252
- package/cli/runtimeDoctorCommands.ts +0 -174
- package/cli/runtimeModeArgs.ts +0 -33
- package/cli/scriptCommandEntries.ts +0 -66
- package/cli/secretScan.ts +0 -31
- package/cli/systemInternalCommandEntries.ts +0 -65
- package/cli/tableCommands.ts +0 -453
- package/cli/tui/readlineWorkspace.ts +0 -210
- package/cli/tui/session.ts +0 -554
- package/cli/updateCommands.ts +0 -134
- package/cli/workflowInternalCommandEntries.ts +0 -10
- package/cliCommandAdapters.ts +0 -28
- package/cliCommandDispatch.ts +0 -66
- package/cliCommandFactories.ts +0 -66
- package/cliCommandTypes.ts +0 -49
- package/cliEnvHelpers.ts +0 -116
- package/cliSpaceHelpers.ts +0 -39
- package/client/agentConfigResolver.test.ts +0 -69
- package/client/agentConfigResolver.ts +0 -1
- package/client/agentRun.test.ts +0 -1344
- package/client/agentRun.ts +0 -795
- package/client/compactDialog.test.ts +0 -238
- package/client/compactDialog.ts +0 -222
- package/client/hybridRecordStore.test.ts +0 -157
- package/client/hybridRecordStore.ts +0 -52
- package/client/localAgentRecords.test.ts +0 -27
- package/client/localAgentRecords.ts +0 -7
- package/client/localDialogRecords.test.ts +0 -124
- package/client/localDialogRecords.ts +0 -30
- package/client/localProviderResolver.test.ts +0 -102
- package/client/localProviderResolver.ts +0 -1
- package/client/localRuntimeAdapter.test.ts +0 -2804
- package/client/localRuntimeAdapter.ts +0 -1104
- package/client/localRuntimeDryRun.test.ts +0 -135
- package/client/localToolPolicy.test.ts +0 -48
- package/client/localToolPolicy.ts +0 -8
- package/client/profileConfig.test.ts +0 -106
- package/client/profileConfig.ts +0 -101
- package/client/streamingOutput.test.ts +0 -22
- package/client/streamingOutput.ts +0 -38
- package/commandRegistry.ts +0 -98
- package/connector-experimental/capabilities.ts +0 -75
- package/connector-experimental/codexBinary.ts +0 -41
- package/connector-experimental/heartbeatLoop.ts +0 -22
- package/connector-experimental/machineInfo.ts +0 -46
- package/connector-experimental/protocol.ts +0 -54
- package/connectorRunArtifact.ts +0 -120
- package/connectorWebSocketTarget.ts +0 -112
- package/core/builtinAgents.ts +0 -209
- package/core/config.ts +0 -15
- package/core/crypto.ts +0 -51
- package/core/generateKeyPairFromSeedV1.ts +0 -15
- package/core/generateMainKey.ts +0 -22
- package/core/init.ts +0 -41
- package/core/localOrigins.ts +0 -8
- package/core/password.ts +0 -13
- package/core/prefix.ts +0 -23
- package/create/editor/transforms/fromMarkdown/index.ts +0 -260
- package/create/editor/transforms/fromMarkdown/inline.ts +0 -285
- package/create/editor/transforms/fromMarkdown/table.ts +0 -130
- package/create/editor/transforms/markdownToSlate.ts +0 -24
- package/create/editor/transforms/slateToRenderMarkdown.ts +0 -218
- package/create/editor/transforms/slateToSimplifiedMarkdown.ts +0 -224
- package/create/editor/transforms/slateToText.ts +0 -33
- package/create/editor/utils/slateUtils.ts +0 -233
- package/create/space/addSpaceAction.ts +0 -193
- package/create/space/category/categoryActions.ts +0 -427
- package/create/space/changeSpaceAction.ts +0 -36
- package/create/space/constants.ts +0 -8
- package/create/space/content/addContentAction.ts +0 -116
- package/create/space/content/contentThunks.ts +0 -90
- package/create/space/content/deleteContentFromSpaceAction.ts +0 -187
- package/create/space/content/deleteMultipleContentAction.ts +0 -112
- package/create/space/content/moveContentAction.ts +0 -285
- package/create/space/content/updateContentCategoryAction.ts +0 -154
- package/create/space/content/updateContentTitleAction.ts +0 -151
- package/create/space/content/uploadAndAddFileToSpaceAction.ts +0 -98
- package/create/space/contentKeyUtils.ts +0 -117
- package/create/space/deleteSpaceAction.ts +0 -276
- package/create/space/fetchSpaceAction.ts +0 -70
- package/create/space/fetchSpaceSidebarStateAction.ts +0 -26
- package/create/space/loadDefaultSpaceAction.ts +0 -57
- package/create/space/member/addMemberAction.ts +0 -79
- package/create/space/member/fetchUserSpaceMembershipsAction.ts +0 -386
- package/create/space/member/memberThunks.ts +0 -47
- package/create/space/member/removeMemberAction.ts +0 -67
- package/create/space/resolvePreferredSpaceId.ts +0 -113
- package/create/space/sidebarVisibleTypes.ts +0 -260
- package/create/space/space.locale.ts +0 -1087
- package/create/space/spaceAccess.ts +0 -182
- package/create/space/spaceCollapsedState.ts +0 -54
- package/create/space/spaceKeys.ts +0 -65
- package/create/space/spaceSlice.ts +0 -328
- package/create/space/spaceThunks.ts +0 -410
- package/create/space/types.ts +0 -27
- package/create/space/updateSpaceAction.ts +0 -107
- package/create/space/utils/permissions.ts +0 -47
- package/create/types.ts +0 -21
- package/database/actions/agentReadResolution.ts +0 -33
- package/database/actions/common.ts +0 -243
- package/database/actions/deleteFile.ts +0 -40
- package/database/actions/fileContent.ts +0 -125
- package/database/actions/patch.ts +0 -155
- package/database/actions/read.ts +0 -358
- package/database/actions/readAndWait.ts +0 -260
- package/database/actions/readRequestManager.ts +0 -120
- package/database/actions/readResolution.ts +0 -125
- package/database/actions/remove.ts +0 -94
- package/database/actions/replication.ts +0 -477
- package/database/actions/upload.ts +0 -186
- package/database/actions/upsert.ts +0 -56
- package/database/actions/write.ts +0 -146
- package/database/authority/ownerKey.ts +0 -80
- package/database/authority/recordAuthority.ts +0 -67
- package/database/authority/userAuthorityRegistry.ts +0 -54
- package/database/client/fetchUserData.ts +0 -61
- package/database/config.ts +0 -40
- package/database/dbActionThunks.ts +0 -1
- package/database/dbSlice.ts +0 -149
- package/database/fileRing.ts +0 -51
- package/database/fileStorage.ts +0 -232
- package/database/fileUrl.ts +0 -34
- package/database/keys.ts +0 -767
- package/database/queryPrefixes.ts +0 -14
- package/database/requests.ts +0 -443
- package/database/runtimeServerContext.ts +0 -54
- package/database/server/authorityStoreTypes.ts +0 -31
- package/database/server/cliAuthorityBrokerClient.ts +0 -227
- package/database/server/cliAuthorityBrokerServer.ts +0 -283
- package/database/server/cliAuthorityBrokerTypes.ts +0 -43
- package/database/server/cliAuthorityStoreDriver.ts +0 -98
- package/database/server/db.ts +0 -99
- package/database/server/dbPath.ts +0 -20
- package/database/server/ensureDbOpen.ts +0 -12
- package/database/server/legacyServerDb.ts +0 -58
- package/database/server/levelAuthorityStore.ts +0 -114
- package/database/server/memoryAuthorityStore.ts +0 -133
- package/database/server/serverStoreFactory.ts +0 -118
- package/database/tenantPlacement.ts +0 -57
- package/database/tombstones.ts +0 -52
- package/database/userDataMerge.ts +0 -95
- package/database/userPreferenceRegister.ts +0 -131
- package/database/utils/ulid.ts +0 -1
- package/defaultServer.ts +0 -1
- package/dialogAttachmentCleanup.ts +0 -151
- package/dialogCommands.ts +0 -1120
- package/dialogInternalCommandEntries.ts +0 -17
- package/docCreateCommands.ts +0 -345
- package/docInternalCommandEntries.ts +0 -11
- package/docPageHelpers.ts +0 -80
- package/docSkillHelpers.ts +0 -67
- package/docSpaceHelpers.ts +0 -46
- package/globalRecordOperations.ts +0 -258
- package/index.ts +0 -78
- package/integrations/anthropic/anthropicModels.ts +0 -47
- package/integrations/deepseek/models.ts +0 -37
- package/integrations/google/models.ts +0 -341
- package/integrations/openai/chatCompletionStreamMode.ts +0 -10
- package/integrations/openai/filterAndCleanMessages.ts +0 -284
- package/integrations/openai/flexTier.ts +0 -102
- package/integrations/openai/generateOpenAIRequestBody.ts +0 -271
- package/integrations/openai/generateResponseRequestBody.ts +0 -77
- package/integrations/openai/models.ts +0 -271
- package/integrations/openai/providerBodyCompatibility.ts +0 -23
- package/integrations/openai/responsesHelpers.ts +0 -297
- package/integrations/x-reader/types.ts +0 -109
- package/integrations/xai/models.ts +0 -13
- package/integrations/xhs-reader/redaction.ts +0 -68
- package/integrations/xhs-reader/types.ts +0 -277
- package/integrations/xhs-reader/url.ts +0 -80
- package/internalCommandEntries.ts +0 -18
- package/localRuntimeAuthority.ts +0 -182
- package/localRuntimeDb.ts +0 -26
- package/machineCommands.ts +0 -307
- package/machineDaemonCommands.ts +0 -185
- package/machineHeartbeatCommands.ts +0 -30
- package/machineStatusCommands.ts +0 -95
- package/machineWatchCommands.ts +0 -41
- package/machineWsPromptMaterialization.ts +0 -89
- package/machineWsRunDispatch.ts +0 -695
- package/machineWsSession.ts +0 -213
- package/memoryCommands.ts +0 -253
- package/memoryInternalCommandEntries.ts +0 -9
- package/offlineMarxistsAgentCommand.ts +0 -316
- package/qoderUsageProbe.ts +0 -252
- package/render/contentIcon/types.ts +0 -167
- package/render/page/createPageAction.ts +0 -183
- package/render/page/docSlice.ts +0 -495
- package/render/page/types.ts +0 -19
- package/render/table/activityColumns.ts +0 -6
- package/render/table/createTableAction.ts +0 -274
- package/render/table/deleteTableAction.ts +0 -193
- package/render/table/fetchAndCacheTableRows.ts +0 -174
- package/render/table/tableSlice.ts +0 -1167
- package/render/table/toolValueUtils.ts +0 -363
- package/render/table/types.ts +0 -262
- package/render/table/utils/tableSerialization.ts +0 -50
- package/runtimeDoctorCommands.ts +0 -174
- package/runtimeModeArgs.ts +0 -33
- package/scriptCommandEntries.ts +0 -66
- package/secretScan.ts +0 -31
- package/server/handlers/agentRun/types.ts +0 -105
- package/share/action.ts +0 -225
- package/share/helpers.ts +0 -302
- package/share/keys.ts +0 -243
- package/share/publicSharePolicy.ts +0 -27
- package/share/shareSlice.ts +0 -53
- package/share/types.ts +0 -100
- package/systemInternalCommandEntries.ts +0 -65
- package/tableCommands.ts +0 -453
- package/tui/readlineWorkspace.ts +0 -210
- package/tui/session.ts +0 -554
- package/updateCommands.ts +0 -134
- package/workflowInternalCommandEntries.ts +0 -10
package/cli/machineCommands.ts
DELETED
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
import type { MachineHeartbeat } from "../connector-experimental/protocol";
|
|
2
|
-
import { detectMachineInfo } from "../connector-experimental/machineInfo";
|
|
3
|
-
import { DEFAULT_NOLO_SERVER_URL } from "./defaultServer";
|
|
4
|
-
import {
|
|
5
|
-
type HeartbeatLoopOptions,
|
|
6
|
-
runHeartbeatLoop as defaultRunHeartbeatLoop,
|
|
7
|
-
} from "../connector-experimental/heartbeatLoop";
|
|
8
|
-
import {
|
|
9
|
-
buildMachinePermissionPromptBlock,
|
|
10
|
-
resolveMachineRunPermissionPolicy,
|
|
11
|
-
} from "../ai/agent/machineRunPermissions";
|
|
12
|
-
import { resolveConnectorWebSocketTarget } from "./connectorWebSocketTarget";
|
|
13
|
-
import {
|
|
14
|
-
checkConnectorWorkspaceLinks,
|
|
15
|
-
runMachineDaemonCommand,
|
|
16
|
-
} from "./machineDaemonCommands";
|
|
17
|
-
import { runMachineHeartbeatConnectCommand } from "./machineHeartbeatCommands";
|
|
18
|
-
import { runMachineWatchCommand } from "./machineWatchCommands";
|
|
19
|
-
import {
|
|
20
|
-
handleConnectorRunMessage,
|
|
21
|
-
type LocalCliExecutor,
|
|
22
|
-
} from "./machineWsRunDispatch";
|
|
23
|
-
import {
|
|
24
|
-
defaultConnectWebSocket,
|
|
25
|
-
runMachineWsSession,
|
|
26
|
-
type ConnectorWebSocketOptions,
|
|
27
|
-
} from "./machineWsSession";
|
|
28
|
-
export {
|
|
29
|
-
formatMachineStatus,
|
|
30
|
-
runMachineStatusCommand,
|
|
31
|
-
type MachineSummary,
|
|
32
|
-
} from "./machineStatusCommands";
|
|
33
|
-
|
|
34
|
-
type EnvLike = Record<string, string | undefined>;
|
|
35
|
-
type OutputLike = { write(chunk: string): unknown };
|
|
36
|
-
|
|
37
|
-
type MachineCommandDeps = {
|
|
38
|
-
env?: EnvLike;
|
|
39
|
-
output?: OutputLike;
|
|
40
|
-
signal?: AbortSignal;
|
|
41
|
-
cliEntrypointPath?: string;
|
|
42
|
-
maxConnectorAttempts?: number;
|
|
43
|
-
sleep?: (ms: number) => Promise<void>;
|
|
44
|
-
fetchImpl?: typeof fetch;
|
|
45
|
-
machineInfo?: () => MachineHeartbeat;
|
|
46
|
-
runHeartbeatLoop?: (options: HeartbeatLoopOptions) => Promise<void>;
|
|
47
|
-
connectWebSocket?: (url: string, options: ConnectorWebSocketOptions) => Promise<void>;
|
|
48
|
-
executeCli?: LocalCliExecutor;
|
|
49
|
-
validateWorkspaceLinks?: (cwd: string) => string[] | Promise<string[]>;
|
|
50
|
-
spawnDaemon?: (args: {
|
|
51
|
-
cmd: string[];
|
|
52
|
-
cwd: string;
|
|
53
|
-
env: EnvLike;
|
|
54
|
-
logPath: string;
|
|
55
|
-
}) => { pid?: number };
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
function resolveServerUrl(env: EnvLike) {
|
|
59
|
-
return (env.NOLO_SERVER || env.BASE_URL || DEFAULT_NOLO_SERVER_URL).replace(/\/+$/, "");
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function resolveAuthToken(env: EnvLike) {
|
|
63
|
-
return env.AUTH_TOKEN || env.AUTH || "";
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function writeAuthMissing(output: OutputLike) {
|
|
67
|
-
output.write(
|
|
68
|
-
"[nolo] Machine commands require an auth token. Run `nolo login` or set AUTH_TOKEN.\n"
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function hasFlag(args: string[], flag: string) {
|
|
73
|
-
return args.includes(flag);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function readOption(args: string[], flag: string) {
|
|
77
|
-
for (let i = 0; i < args.length; i++) {
|
|
78
|
-
const arg = args[i];
|
|
79
|
-
if (arg === flag) {
|
|
80
|
-
const next = args[i + 1];
|
|
81
|
-
if (typeof next === "string" && !next.startsWith("-")) return next;
|
|
82
|
-
return "";
|
|
83
|
-
}
|
|
84
|
-
if (arg.startsWith(flag + "=")) {
|
|
85
|
-
return arg.slice(flag.length + 1);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return "";
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function resolveConnectServerUrl(args: string[], env: EnvLike) {
|
|
92
|
-
const fromFlag = readOption(args, "--server-url") || readOption(args, "--server");
|
|
93
|
-
const raw = fromFlag || env.NOLO_SERVER || env.BASE_URL || DEFAULT_NOLO_SERVER_URL;
|
|
94
|
-
return String(raw).replace(/\/+$|\s+$/g, "").replace(/\/+$/g, "").replace(/\s+$/g, "");
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function resolveConnectAuthToken(args: string[], env: EnvLike) {
|
|
98
|
-
return readOption(args, "--machine-key") || readOption(args, "--token") || resolveAuthToken(env);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const defaultSleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));
|
|
102
|
-
|
|
103
|
-
async function sleepWithAbort(ms: number, sleep: (ms: number) => Promise<void>, signal?: AbortSignal) {
|
|
104
|
-
if (!signal) {
|
|
105
|
-
await sleep(ms);
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
if (signal.aborted) return;
|
|
109
|
-
await Promise.race([
|
|
110
|
-
sleep(ms),
|
|
111
|
-
new Promise<void>((resolve) => {
|
|
112
|
-
signal.addEventListener("abort", () => resolve(), { once: true });
|
|
113
|
-
}),
|
|
114
|
-
]);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
function resolveConnectorReconnectDelayMs(env: EnvLike) {
|
|
118
|
-
const raw = Number(env.NOLO_CONNECT_RECONNECT_MS ?? "");
|
|
119
|
-
return Number.isFinite(raw) && raw >= 0 ? raw : 5_000;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
async function defaultExecuteCli(
|
|
123
|
-
provider: string,
|
|
124
|
-
prompt: string,
|
|
125
|
-
options: { model?: string; timeout?: number; cwd?: string; yolo?: boolean; env?: EnvLike }
|
|
126
|
-
) {
|
|
127
|
-
const { executeCli } = await import("../ai/agent/cliExecutor");
|
|
128
|
-
return executeCli(provider as any, prompt, options);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function detectLaunchableMachineInfo() {
|
|
132
|
-
return detectMachineInfo({ probeLaunchable: true });
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
function findTaskRowSubjectRef(runtimeContext: any) {
|
|
136
|
-
const subjectRefs = Array.isArray(runtimeContext?.subjectRefs) ? runtimeContext.subjectRefs : [];
|
|
137
|
-
for (const ref of subjectRefs) {
|
|
138
|
-
if (!ref || typeof ref !== "object" || Array.isArray(ref)) continue;
|
|
139
|
-
if (ref.kind !== "table-row") continue;
|
|
140
|
-
const id = typeof ref.id === "string" ? ref.id.trim() : "";
|
|
141
|
-
if (id) return id;
|
|
142
|
-
}
|
|
143
|
-
return "";
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
function buildTaskEvidencePrompt(args: {
|
|
147
|
-
agentKey: string;
|
|
148
|
-
agentConfig: any;
|
|
149
|
-
runtimeContext: any;
|
|
150
|
-
}) {
|
|
151
|
-
const rowDbKey = findTaskRowSubjectRef(args.runtimeContext);
|
|
152
|
-
if (!rowDbKey) return "";
|
|
153
|
-
return [
|
|
154
|
-
"--- Nolo task evidence context ---",
|
|
155
|
-
"This CLI runtime does not receive server-side function tools directly.",
|
|
156
|
-
"Use the task row subjectRef and linked dialog/activity evidence as the durable task context.",
|
|
157
|
-
"Run commands from the repository root. The runner already provides server URL and auth in the environment.",
|
|
158
|
-
"Release boundary: after review passes, AI/reviewer/Codex may advance alpha for verification. Do not merge, push, or release main/release unless the human owner explicitly authorizes it in the current task context.",
|
|
159
|
-
"Handoff context: inspect activityRefs/latestActivityRef, dialog checkpoints, artifacts, commits, and test evidence. Use dialog read/search for exact evidence; do not infer completion from handoff text alone.",
|
|
160
|
-
`Read task row: bun packages/cli/index.ts table query --table meta-0e95801d90-NOLOTASKBOARD --row ${JSON.stringify(rowDbKey)} --include-activity --output json`,
|
|
161
|
-
"Then read linked activity dialog ids with: bun packages/cli/index.ts dialog read <dialogId>",
|
|
162
|
-
"Report progress, blockers, worktree, branch, commit/diff, tests, and unverified items in the dialog.",
|
|
163
|
-
].join("\n");
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
function buildConnectorCliPrompt(agentConfig: any, userInput: string, bridgeArgs?: {
|
|
167
|
-
agentKey: string;
|
|
168
|
-
runtimeContext: any;
|
|
169
|
-
}, permissionPolicy?: ReturnType<typeof resolveMachineRunPermissionPolicy>) {
|
|
170
|
-
const policy = permissionPolicy ?? resolveMachineRunPermissionPolicy(agentConfig);
|
|
171
|
-
return [
|
|
172
|
-
typeof agentConfig?.prompt === "string" ? agentConfig.prompt.trim() : "",
|
|
173
|
-
bridgeArgs ? buildTaskEvidencePrompt({
|
|
174
|
-
agentKey: bridgeArgs.agentKey,
|
|
175
|
-
agentConfig,
|
|
176
|
-
runtimeContext: bridgeArgs.runtimeContext,
|
|
177
|
-
}) : "",
|
|
178
|
-
buildMachinePermissionPromptBlock(policy),
|
|
179
|
-
`--- User task ---\n${userInput}`,
|
|
180
|
-
].filter(Boolean).join("\n\n");
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
export async function runMachineConnectCommand(
|
|
184
|
-
args: string[],
|
|
185
|
-
deps: MachineCommandDeps = {}
|
|
186
|
-
) {
|
|
187
|
-
const env = deps.env ?? process.env;
|
|
188
|
-
const output = deps.output ?? process.stdout;
|
|
189
|
-
const authToken = resolveConnectAuthToken(args, env);
|
|
190
|
-
if (!authToken) {
|
|
191
|
-
writeAuthMissing(output);
|
|
192
|
-
return 1;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
const serverUrl = resolveConnectServerUrl(args, env);
|
|
196
|
-
const fetchImpl = deps.fetchImpl ?? fetch;
|
|
197
|
-
const machine = (deps.machineInfo ?? detectLaunchableMachineInfo)();
|
|
198
|
-
const sendHeartbeat = async () => {
|
|
199
|
-
const res = await fetchImpl(`${serverUrl}/api/machines/heartbeat`, {
|
|
200
|
-
method: "POST",
|
|
201
|
-
headers: {
|
|
202
|
-
Authorization: `Bearer ${authToken}`,
|
|
203
|
-
"Content-Type": "application/json",
|
|
204
|
-
},
|
|
205
|
-
body: JSON.stringify(machine),
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
if (!res.ok) {
|
|
209
|
-
const text = await res.text().catch(() => "");
|
|
210
|
-
throw new Error(`HTTP ${res.status}\n${text}`);
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
if (hasFlag(args, "--daemon") || hasFlag(args, "--background")) {
|
|
215
|
-
return runMachineDaemonCommand({
|
|
216
|
-
env,
|
|
217
|
-
output,
|
|
218
|
-
cliEntrypointPath: deps.cliEntrypointPath,
|
|
219
|
-
validateWorkspaceLinks: deps.validateWorkspaceLinks,
|
|
220
|
-
spawnDaemon: deps.spawnDaemon,
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
if (hasFlag(args, "--ws")) {
|
|
225
|
-
const validateWorkspaceLinks = deps.validateWorkspaceLinks ?? (() => []);
|
|
226
|
-
if (!(await checkConnectorWorkspaceLinks(process.cwd(), output, validateWorkspaceLinks))) {
|
|
227
|
-
return 1;
|
|
228
|
-
}
|
|
229
|
-
const maxAttempts = deps.maxConnectorAttempts ?? Infinity;
|
|
230
|
-
const sleep = deps.sleep ?? defaultSleep;
|
|
231
|
-
const reconnectDelayMs = resolveConnectorReconnectDelayMs(env);
|
|
232
|
-
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
|
|
233
|
-
if (deps.signal?.aborted) {
|
|
234
|
-
return 0;
|
|
235
|
-
}
|
|
236
|
-
const runtimeServerUrl =
|
|
237
|
-
env.NOLO_CONNECT_RUNTIME_SERVER_URL ||
|
|
238
|
-
env.NOLO_RUNTIME_SERVER_URL ||
|
|
239
|
-
serverUrl;
|
|
240
|
-
const sessionResult = await runMachineWsSession({
|
|
241
|
-
env,
|
|
242
|
-
output,
|
|
243
|
-
signal: deps.signal,
|
|
244
|
-
machine,
|
|
245
|
-
sendHeartbeat,
|
|
246
|
-
runHeartbeatLoop: deps.runHeartbeatLoop ?? defaultRunHeartbeatLoop,
|
|
247
|
-
connectWebSocket: deps.connectWebSocket ?? defaultConnectWebSocket,
|
|
248
|
-
serverUrl,
|
|
249
|
-
authToken,
|
|
250
|
-
resolveConnectorWebSocketTarget: (options) =>
|
|
251
|
-
resolveConnectorWebSocketTarget({
|
|
252
|
-
...options,
|
|
253
|
-
fetchImpl,
|
|
254
|
-
}),
|
|
255
|
-
onMessage: (message, send) =>
|
|
256
|
-
handleConnectorRunMessage(
|
|
257
|
-
message,
|
|
258
|
-
send,
|
|
259
|
-
deps.executeCli ?? defaultExecuteCli,
|
|
260
|
-
{
|
|
261
|
-
...env,
|
|
262
|
-
NOLO_SERVER: runtimeServerUrl,
|
|
263
|
-
NOLO_SERVER_URL: runtimeServerUrl,
|
|
264
|
-
BASE_URL: runtimeServerUrl,
|
|
265
|
-
AUTH_TOKEN: authToken,
|
|
266
|
-
NOLO_MACHINE_API_KEY: authToken,
|
|
267
|
-
},
|
|
268
|
-
fetchImpl,
|
|
269
|
-
{
|
|
270
|
-
buildConnectorCliPrompt,
|
|
271
|
-
}
|
|
272
|
-
),
|
|
273
|
-
});
|
|
274
|
-
const exitCode = sessionResult.exitCode;
|
|
275
|
-
if (exitCode === 2) return 1;
|
|
276
|
-
if (deps.signal?.aborted) {
|
|
277
|
-
return 0;
|
|
278
|
-
}
|
|
279
|
-
if (attempt >= maxAttempts) return exitCode;
|
|
280
|
-
const retryDelayMs = sessionResult.retryAfterMs ?? reconnectDelayMs;
|
|
281
|
-
const reconnectContext =
|
|
282
|
-
sessionResult.reconnectReason === "core_draining" ? " during core draining" : "";
|
|
283
|
-
output.write(
|
|
284
|
-
`[nolo] Connector websocket disconnected${reconnectContext}. Reconnecting in ${retryDelayMs}ms.\n`
|
|
285
|
-
);
|
|
286
|
-
await sleepWithAbort(retryDelayMs, sleep, deps.signal);
|
|
287
|
-
}
|
|
288
|
-
return 0;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
if (hasFlag(args, "--watch")) {
|
|
292
|
-
return runMachineWatchCommand({
|
|
293
|
-
env,
|
|
294
|
-
output,
|
|
295
|
-
machine,
|
|
296
|
-
sendHeartbeat,
|
|
297
|
-
runHeartbeatLoop: deps.runHeartbeatLoop ?? defaultRunHeartbeatLoop,
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
return runMachineHeartbeatConnectCommand({
|
|
302
|
-
output,
|
|
303
|
-
machine,
|
|
304
|
-
sendHeartbeat,
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
import { existsSync, mkdirSync, openSync, readFileSync, realpathSync } from "node:fs";
|
|
3
|
-
import { homedir } from "node:os";
|
|
4
|
-
import { dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
5
|
-
|
|
6
|
-
type EnvLike = Record<string, string | undefined>;
|
|
7
|
-
type OutputLike = { write(chunk: string): unknown };
|
|
8
|
-
|
|
9
|
-
type PackageJson = {
|
|
10
|
-
name?: string;
|
|
11
|
-
workspaces?: string[] | { packages?: string[] };
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const CONNECTOR_RUNTIME_WORKSPACE_PACKAGES = new Set([
|
|
15
|
-
"connector-experimental",
|
|
16
|
-
"ai",
|
|
17
|
-
]);
|
|
18
|
-
|
|
19
|
-
function readJsonFile<T>(path: string): T | null {
|
|
20
|
-
try {
|
|
21
|
-
return JSON.parse(readFileSync(path, "utf8")) as T;
|
|
22
|
-
} catch {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function getWorkspacePatterns(packageJson: PackageJson) {
|
|
28
|
-
if (Array.isArray(packageJson.workspaces)) return packageJson.workspaces;
|
|
29
|
-
return packageJson.workspaces?.packages ?? [];
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function normalizePath(path: string) {
|
|
33
|
-
const resolved = resolve(path);
|
|
34
|
-
return process.platform === "win32" ? resolved.toLowerCase() : resolved;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function isInsideOrSame(path: string, parent: string) {
|
|
38
|
-
const relativePath = relative(parent, path);
|
|
39
|
-
return relativePath === "" || (!relativePath.startsWith("..") && !isAbsolute(relativePath));
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function findWorkspaceRoot(startPath: string) {
|
|
43
|
-
let current = resolve(startPath);
|
|
44
|
-
while (true) {
|
|
45
|
-
const packageJsonPath = join(current, "package.json");
|
|
46
|
-
if (existsSync(packageJsonPath)) {
|
|
47
|
-
const packageJson = readJsonFile<PackageJson>(packageJsonPath);
|
|
48
|
-
if (packageJson && getWorkspacePatterns(packageJson).length > 0) {
|
|
49
|
-
return current;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const parent = dirname(current);
|
|
53
|
-
if (parent === current) return null;
|
|
54
|
-
current = parent;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function validateConnectorWorkspaceLinks(cwd: string) {
|
|
59
|
-
const repoRoot = findWorkspaceRoot(cwd);
|
|
60
|
-
if (!repoRoot) return [];
|
|
61
|
-
|
|
62
|
-
const rootPackageJson = readJsonFile<PackageJson>(join(repoRoot, "package.json"));
|
|
63
|
-
if (!rootPackageJson) return [];
|
|
64
|
-
|
|
65
|
-
const normalizedRepoRoot = normalizePath(realpathSync(repoRoot));
|
|
66
|
-
const errors: string[] = [];
|
|
67
|
-
|
|
68
|
-
for (const pattern of getWorkspacePatterns(rootPackageJson)) {
|
|
69
|
-
if (!pattern.endsWith("/*")) continue;
|
|
70
|
-
const workspaceParent = join(repoRoot, pattern.slice(0, -2));
|
|
71
|
-
if (!existsSync(workspaceParent)) continue;
|
|
72
|
-
|
|
73
|
-
for (const entry of Array.from(new Bun.Glob("*/package.json").scanSync({ cwd: workspaceParent }))) {
|
|
74
|
-
const packageDir = join(workspaceParent, dirname(entry));
|
|
75
|
-
const packageJson = readJsonFile<PackageJson>(join(workspaceParent, entry));
|
|
76
|
-
if (!packageJson?.name || !CONNECTOR_RUNTIME_WORKSPACE_PACKAGES.has(packageJson.name)) {
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const linkPath = join(repoRoot, "node_modules", ...packageJson.name.split("/"));
|
|
81
|
-
if (!existsSync(linkPath)) {
|
|
82
|
-
errors.push(`${linkPath} is missing. Run bun install in ${repoRoot}.`);
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const actualPath = normalizePath(realpathSync(linkPath));
|
|
87
|
-
const expectedPath = normalizePath(realpathSync(packageDir));
|
|
88
|
-
if (!isInsideOrSame(actualPath, normalizedRepoRoot)) {
|
|
89
|
-
errors.push(
|
|
90
|
-
`${linkPath} points outside this checkout: ${actualPath}. Run bun install in ${repoRoot}.`,
|
|
91
|
-
);
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
if (actualPath !== expectedPath) {
|
|
95
|
-
errors.push(
|
|
96
|
-
`${linkPath} points at ${actualPath}, expected ${expectedPath}. Run bun install in ${repoRoot}.`,
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
return errors;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export async function checkConnectorWorkspaceLinks(
|
|
106
|
-
cwd: string,
|
|
107
|
-
output: OutputLike,
|
|
108
|
-
validateWorkspaceLinks: (cwd: string) => string[] | Promise<string[]>,
|
|
109
|
-
) {
|
|
110
|
-
const errors = await validateWorkspaceLinks(cwd);
|
|
111
|
-
if (errors.length === 0) return true;
|
|
112
|
-
output.write(
|
|
113
|
-
[
|
|
114
|
-
"[nolo] Connector workspace package links are unsafe.",
|
|
115
|
-
"The connector would import workspace packages from a different checkout, so machine capabilities and runtime behavior may be stale.",
|
|
116
|
-
...errors,
|
|
117
|
-
"",
|
|
118
|
-
].join("\n"),
|
|
119
|
-
);
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function resolveDaemonLogPath(env: EnvLike) {
|
|
124
|
-
return env.NOLO_CONNECT_LOG || join(homedir(), ".nolo", "logs", "connector.log");
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
function buildDaemonCommand(cliEntrypointPath: string | undefined) {
|
|
128
|
-
return [process.execPath, cliEntrypointPath || import.meta.path, "connect", "--ws"];
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
function defaultSpawnDaemon(args: {
|
|
132
|
-
cmd: string[];
|
|
133
|
-
cwd: string;
|
|
134
|
-
env: EnvLike;
|
|
135
|
-
logPath: string;
|
|
136
|
-
}) {
|
|
137
|
-
mkdirSync(dirname(args.logPath), { recursive: true });
|
|
138
|
-
const out = openSync(args.logPath, "a");
|
|
139
|
-
const env = Object.fromEntries(
|
|
140
|
-
Object.entries(args.env).filter((entry): entry is [string, string] => typeof entry[1] === "string")
|
|
141
|
-
);
|
|
142
|
-
const proc = spawn(args.cmd[0], args.cmd.slice(1), {
|
|
143
|
-
cwd: args.cwd,
|
|
144
|
-
env,
|
|
145
|
-
detached: true,
|
|
146
|
-
stdio: ["ignore", out, out],
|
|
147
|
-
});
|
|
148
|
-
proc.unref();
|
|
149
|
-
return { pid: proc.pid };
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
export type MachineDaemonCommandDeps = {
|
|
153
|
-
env?: EnvLike;
|
|
154
|
-
output?: OutputLike;
|
|
155
|
-
cliEntrypointPath?: string;
|
|
156
|
-
validateWorkspaceLinks?: (cwd: string) => string[] | Promise<string[]>;
|
|
157
|
-
spawnDaemon?: (args: {
|
|
158
|
-
cmd: string[];
|
|
159
|
-
cwd: string;
|
|
160
|
-
env: EnvLike;
|
|
161
|
-
logPath: string;
|
|
162
|
-
}) => { pid?: number };
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
export async function runMachineDaemonCommand(
|
|
166
|
-
deps: MachineDaemonCommandDeps = {}
|
|
167
|
-
) {
|
|
168
|
-
const env = deps.env ?? process.env;
|
|
169
|
-
const output = deps.output ?? process.stdout;
|
|
170
|
-
const validateWorkspaceLinks = deps.validateWorkspaceLinks ?? validateConnectorWorkspaceLinks;
|
|
171
|
-
|
|
172
|
-
if (!(await checkConnectorWorkspaceLinks(process.cwd(), output, validateWorkspaceLinks))) {
|
|
173
|
-
return 1;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
const logPath = resolveDaemonLogPath(env);
|
|
177
|
-
const result = (deps.spawnDaemon ?? defaultSpawnDaemon)({
|
|
178
|
-
cmd: buildDaemonCommand(deps.cliEntrypointPath),
|
|
179
|
-
cwd: process.cwd(),
|
|
180
|
-
env,
|
|
181
|
-
logPath,
|
|
182
|
-
});
|
|
183
|
-
output.write(`Connector daemon started${result.pid ? ` pid=${result.pid}` : ""}. Log: ${logPath}\n`);
|
|
184
|
-
return 0;
|
|
185
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { MachineHeartbeat } from "../connector-experimental/protocol";
|
|
2
|
-
|
|
3
|
-
type OutputLike = { write(chunk: string): unknown };
|
|
4
|
-
|
|
5
|
-
export type MachineHeartbeatConnectDeps = {
|
|
6
|
-
output?: OutputLike;
|
|
7
|
-
machine: MachineHeartbeat;
|
|
8
|
-
sendHeartbeat: () => Promise<void>;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export async function runMachineHeartbeatConnectCommand(
|
|
12
|
-
deps: MachineHeartbeatConnectDeps
|
|
13
|
-
) {
|
|
14
|
-
const output = deps.output ?? process.stdout;
|
|
15
|
-
const machine = deps.machine;
|
|
16
|
-
|
|
17
|
-
try {
|
|
18
|
-
await deps.sendHeartbeat();
|
|
19
|
-
} catch (error) {
|
|
20
|
-
output.write(
|
|
21
|
-
`[nolo] Machine connect failed: ${
|
|
22
|
-
error instanceof Error ? error.message : String(error)
|
|
23
|
-
}\n`
|
|
24
|
-
);
|
|
25
|
-
return 1;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
output.write(`Connected machine: ${machine.name} (${machine.platform}/${machine.arch})\n`);
|
|
29
|
-
return 0;
|
|
30
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { DEFAULT_NOLO_SERVER_URL } from "./defaultServer";
|
|
2
|
-
|
|
3
|
-
type EnvLike = Record<string, string | undefined>;
|
|
4
|
-
type OutputLike = { write(chunk: string): unknown };
|
|
5
|
-
|
|
6
|
-
export type MachineSummary = {
|
|
7
|
-
machineId: string;
|
|
8
|
-
name: string;
|
|
9
|
-
platform: string;
|
|
10
|
-
arch: string;
|
|
11
|
-
connectorVersion: string | null;
|
|
12
|
-
capabilities: string[];
|
|
13
|
-
connectorStatus?: "connected" | "disconnected";
|
|
14
|
-
status: "online" | "offline";
|
|
15
|
-
lastSeenAt: number;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export type MachineStatusCommandDeps = {
|
|
19
|
-
env?: EnvLike;
|
|
20
|
-
output?: OutputLike;
|
|
21
|
-
fetchImpl?: typeof fetch;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
function resolveServerUrl(env: EnvLike) {
|
|
25
|
-
return (env.NOLO_SERVER || env.BASE_URL || DEFAULT_NOLO_SERVER_URL).replace(/\/+$/, "");
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function resolveAuthToken(env: EnvLike) {
|
|
29
|
-
return env.AUTH_TOKEN || env.AUTH || "";
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function writeAuthMissing(output: OutputLike) {
|
|
33
|
-
output.write(
|
|
34
|
-
"[nolo] Machine commands require an auth token. Run `nolo login` or set AUTH_TOKEN.\n"
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function formatMachineStatus(machines: MachineSummary[]) {
|
|
39
|
-
if (machines.length === 0) {
|
|
40
|
-
return "No connected machines.\nRun `nolo connect` on this computer to register it once.\n";
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return [
|
|
44
|
-
"Connected machines:",
|
|
45
|
-
...machines.map((machine) => {
|
|
46
|
-
const caps = machine.capabilities.length ? machine.capabilities.join(", ") : "no capabilities";
|
|
47
|
-
const connector = machine.connectorStatus ? ` ws:${machine.connectorStatus}` : "";
|
|
48
|
-
return `- ${machine.name} ${machine.status}${connector} ${machine.platform}/${machine.arch} ${caps}`;
|
|
49
|
-
}),
|
|
50
|
-
"",
|
|
51
|
-
].join("\n");
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export async function runMachineStatusCommand(
|
|
55
|
-
_args: string[],
|
|
56
|
-
deps: MachineStatusCommandDeps = {}
|
|
57
|
-
) {
|
|
58
|
-
const env = deps.env ?? process.env;
|
|
59
|
-
const output = deps.output ?? process.stdout;
|
|
60
|
-
const authToken = resolveAuthToken(env);
|
|
61
|
-
if (!authToken) {
|
|
62
|
-
writeAuthMissing(output);
|
|
63
|
-
return 1;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const serverUrl = resolveServerUrl(env);
|
|
67
|
-
const fetchImpl = deps.fetchImpl ?? fetch;
|
|
68
|
-
let res: Response;
|
|
69
|
-
try {
|
|
70
|
-
res = await fetchImpl(`${serverUrl}/api/machines`, {
|
|
71
|
-
method: "GET",
|
|
72
|
-
headers: {
|
|
73
|
-
Authorization: `Bearer ${authToken}`,
|
|
74
|
-
},
|
|
75
|
-
});
|
|
76
|
-
} catch (error) {
|
|
77
|
-
output.write(
|
|
78
|
-
`[nolo] Machine status failed: ${
|
|
79
|
-
error instanceof Error ? error.message : String(error)
|
|
80
|
-
}\n`
|
|
81
|
-
);
|
|
82
|
-
return 1;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (!res.ok) {
|
|
86
|
-
const text = await res.text().catch(() => "");
|
|
87
|
-
output.write(`[nolo] Machine status failed: HTTP ${res.status}\n${text}\n`);
|
|
88
|
-
return 1;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const data = await res.json().catch(() => ({ machines: [] }));
|
|
92
|
-
const machines = Array.isArray(data?.machines) ? data.machines : [];
|
|
93
|
-
output.write(formatMachineStatus(machines));
|
|
94
|
-
return 0;
|
|
95
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { MachineHeartbeat } from "../connector-experimental/protocol";
|
|
2
|
-
import type { HeartbeatLoopOptions } from "../connector-experimental/heartbeatLoop";
|
|
3
|
-
|
|
4
|
-
type EnvLike = Record<string, string | undefined>;
|
|
5
|
-
type OutputLike = { write(chunk: string): unknown };
|
|
6
|
-
|
|
7
|
-
function resolveHeartbeatIntervalMs(env: EnvLike) {
|
|
8
|
-
const raw = Number(env.NOLO_CONNECT_HEARTBEAT_MS ?? "");
|
|
9
|
-
return Number.isFinite(raw) && raw > 0 ? raw : 30_000;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export type MachineWatchCommandDeps = {
|
|
13
|
-
env?: EnvLike;
|
|
14
|
-
output?: OutputLike;
|
|
15
|
-
machine: MachineHeartbeat;
|
|
16
|
-
sendHeartbeat: () => Promise<void>;
|
|
17
|
-
runHeartbeatLoop: (options: HeartbeatLoopOptions) => Promise<void>;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export async function runMachineWatchCommand(
|
|
21
|
-
deps: MachineWatchCommandDeps
|
|
22
|
-
) {
|
|
23
|
-
const env = deps.env ?? process.env;
|
|
24
|
-
const output = deps.output ?? process.stdout;
|
|
25
|
-
const machine = deps.machine;
|
|
26
|
-
output.write(`Connecting machine heartbeat loop: ${machine.name} (${machine.platform}/${machine.arch})\n`);
|
|
27
|
-
try {
|
|
28
|
-
await deps.runHeartbeatLoop({
|
|
29
|
-
intervalMs: resolveHeartbeatIntervalMs(env),
|
|
30
|
-
sendHeartbeat: deps.sendHeartbeat,
|
|
31
|
-
});
|
|
32
|
-
return 0;
|
|
33
|
-
} catch (error) {
|
|
34
|
-
output.write(
|
|
35
|
-
`[nolo] Machine heartbeat loop failed: ${
|
|
36
|
-
error instanceof Error ? error.message : String(error)
|
|
37
|
-
}\n`
|
|
38
|
-
);
|
|
39
|
-
return 1;
|
|
40
|
-
}
|
|
41
|
-
}
|