@tickernelz/wardmote 2026.1112.1 → 2026.1114.0
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/dist/index.js +188 -71
- package/dist/index.js.map +3 -3
- package/package.json +25 -3
package/dist/index.js
CHANGED
|
@@ -1538,7 +1538,7 @@ var init_native_finalization2 = __esm({
|
|
|
1538
1538
|
companyId: z6.string().uuid(),
|
|
1539
1539
|
result: z6.record(z6.string(), z6.unknown()),
|
|
1540
1540
|
terminal: z6.object({
|
|
1541
|
-
schema: z6.literal("
|
|
1541
|
+
schema: z6.literal("wardmote.prp.terminal.v1"),
|
|
1542
1542
|
turnTerminalState: z6.enum(["completed", "failed", "interrupted", "cancelled"]),
|
|
1543
1543
|
runTerminalState: z6.enum(["succeeded", "failed", "cancelled"]),
|
|
1544
1544
|
reportedWorkDisposition: z6.enum(["done", "blocked", "needs_review", "yielded"])
|
|
@@ -1989,7 +1989,9 @@ var init_work_product = __esm({
|
|
|
1989
1989
|
executionWorkspaceId: z11.string().guid().optional().nullable(),
|
|
1990
1990
|
runtimeServiceId: z11.string().guid().optional().nullable(),
|
|
1991
1991
|
type: issueWorkProductTypeSchema,
|
|
1992
|
-
provider: z11.string().min(1),
|
|
1992
|
+
provider: z11.string().min(1).refine((provider) => provider !== "paperclip", {
|
|
1993
|
+
message: 'The work product provider "paperclip" was renamed to "wardmote"'
|
|
1994
|
+
}),
|
|
1993
1995
|
externalId: z11.string().optional().nullable(),
|
|
1994
1996
|
title: z11.string().min(1),
|
|
1995
1997
|
url: z11.string().url().optional().nullable(),
|
|
@@ -2081,12 +2083,12 @@ function questionSetToAskUserQuestionsPayload(questionSet) {
|
|
|
2081
2083
|
...description !== void 0 ? { description } : {}
|
|
2082
2084
|
}));
|
|
2083
2085
|
const freeTextOption = question.answerMode === "text" ? {
|
|
2084
|
-
id: "
|
|
2086
|
+
id: "wardmote_text_answer",
|
|
2085
2087
|
label: question.header || "Type an answer",
|
|
2086
2088
|
...question.textValidation?.inputType ? { description: `Expected ${question.textValidation.inputType} input` } : {},
|
|
2087
2089
|
freeText: true
|
|
2088
2090
|
} : question.customAnswer?.enabled ? {
|
|
2089
|
-
id: syntheticOptionId(options.map((option) => option.id), "
|
|
2091
|
+
id: syntheticOptionId(options.map((option) => option.id), "wardmote_custom_answer"),
|
|
2090
2092
|
label: question.customAnswer.label || "Other",
|
|
2091
2093
|
...question.customAnswer.placeholder !== void 0 ? { description: question.customAnswer.placeholder } : {},
|
|
2092
2094
|
freeText: true
|
|
@@ -4267,7 +4269,7 @@ var init_cognee = __esm({
|
|
|
4267
4269
|
],
|
|
4268
4270
|
whenToUse: "Connect your Cloud tenant through the official Cognee MCP client.",
|
|
4269
4271
|
defaults: {
|
|
4270
|
-
templateKey: "
|
|
4272
|
+
templateKey: "wardmote.cognee-cloud"
|
|
4271
4273
|
},
|
|
4272
4274
|
guidanceMd: "Copy the API Base URL and create an API key on Cognee's API Keys page. Use a Cloud workspace with an active subscription. Wardmote uses its bundled Cloud client; no extra runtime installation is required.",
|
|
4273
4275
|
riskTier: "S3",
|
|
@@ -9289,7 +9291,7 @@ var init_google_sheets = __esm({
|
|
|
9289
9291
|
],
|
|
9290
9292
|
whenToUse: "Share selected spreadsheets with the Wardmote robot account instead of connecting a Google identity.",
|
|
9291
9293
|
defaults: {
|
|
9292
|
-
templateKey: "
|
|
9294
|
+
templateKey: "wardmote.google-sheets"
|
|
9293
9295
|
},
|
|
9294
9296
|
guidanceMd: "Share each spreadsheet with the Wardmote robot email, then paste the sheet links.",
|
|
9295
9297
|
riskTier: "S3",
|
|
@@ -16614,7 +16616,7 @@ var init_smoke_lab = __esm({
|
|
|
16614
16616
|
});
|
|
16615
16617
|
|
|
16616
16618
|
// ../packages/shared/src/types/instance.ts
|
|
16617
|
-
var DAILY_RETENTION_PRESETS, WEEKLY_RETENTION_PRESETS, MONTHLY_RETENTION_PRESETS, BACKUP_MAX_FILES_MIN, BACKUP_MAX_FILES_MAX, DEFAULT_BACKUP_RETENTION, SPEECH_TO_TEXT_DEFAULTS, ATTACHMENT_MAX_MEGABYTES_MIN, ATTACHMENT_MAX_MEGABYTES_MAX, ATTACHMENT_ORPHAN_AFTER_DAYS_MIN, ATTACHMENT_ORPHAN_AFTER_DAYS_MAX, ATTACHMENT_CLOSED_TASK_AFTER_DAYS_MIN, ATTACHMENT_CLOSED_TASK_AFTER_DAYS_MAX, DEFAULT_ATTACHMENT_RETENTION, DEFAULT_LOCAL_RUN_LIMITS_SETTINGS, DEFAULT_MESSAGE_DELIVERY;
|
|
16619
|
+
var DAILY_RETENTION_PRESETS, WEEKLY_RETENTION_PRESETS, MONTHLY_RETENTION_PRESETS, BACKUP_MAX_FILES_MIN, BACKUP_MAX_FILES_MAX, DEFAULT_BACKUP_RETENTION, SPEECH_TO_TEXT_PROVIDERS, SPEECH_TO_TEXT_GOOGLE_MAX_LANGUAGES, SPEECH_TO_TEXT_KEYTERMS_MAX, SPEECH_TO_TEXT_KEYTERM_MAX_LENGTH, SPEECH_TO_TEXT_MAX_SPEAKERS, SPEECH_TO_TEXT_DEFAULTS, ATTACHMENT_MAX_MEGABYTES_MIN, ATTACHMENT_MAX_MEGABYTES_MAX, ATTACHMENT_ORPHAN_AFTER_DAYS_MIN, ATTACHMENT_ORPHAN_AFTER_DAYS_MAX, ATTACHMENT_CLOSED_TASK_AFTER_DAYS_MIN, ATTACHMENT_CLOSED_TASK_AFTER_DAYS_MAX, DEFAULT_ATTACHMENT_RETENTION, DEFAULT_LOCAL_RUN_LIMITS_SETTINGS, DEFAULT_MESSAGE_DELIVERY;
|
|
16618
16620
|
var init_instance = __esm({
|
|
16619
16621
|
"../packages/shared/src/types/instance.ts"() {
|
|
16620
16622
|
"use strict";
|
|
@@ -16629,11 +16631,23 @@ var init_instance = __esm({
|
|
|
16629
16631
|
monthlyMonths: 1,
|
|
16630
16632
|
maxFiles: 2
|
|
16631
16633
|
};
|
|
16634
|
+
SPEECH_TO_TEXT_PROVIDERS = ["openai_compatible", "deepgram", "elevenlabs", "google"];
|
|
16635
|
+
SPEECH_TO_TEXT_GOOGLE_MAX_LANGUAGES = 3;
|
|
16636
|
+
SPEECH_TO_TEXT_KEYTERMS_MAX = 100;
|
|
16637
|
+
SPEECH_TO_TEXT_KEYTERM_MAX_LENGTH = 50;
|
|
16638
|
+
SPEECH_TO_TEXT_MAX_SPEAKERS = 32;
|
|
16632
16639
|
SPEECH_TO_TEXT_DEFAULTS = {
|
|
16633
16640
|
enabled: false,
|
|
16641
|
+
provider: "openai_compatible",
|
|
16634
16642
|
baseUrl: "",
|
|
16635
16643
|
model: "",
|
|
16636
16644
|
apiKeyEnvVar: "",
|
|
16645
|
+
language: "",
|
|
16646
|
+
diarize: false,
|
|
16647
|
+
keyterms: [],
|
|
16648
|
+
deepgram: { smartFormat: true },
|
|
16649
|
+
elevenlabs: { tagAudioEvents: false, numSpeakers: null },
|
|
16650
|
+
google: { location: "us", projectId: "", autoPunctuation: true, alternativeLanguages: [] },
|
|
16637
16651
|
maxAudioSeconds: 600,
|
|
16638
16652
|
sttWaitSeconds: 15
|
|
16639
16653
|
};
|
|
@@ -17213,7 +17227,10 @@ function isSpeechToTextBaseUrl(value) {
|
|
|
17213
17227
|
if (url.username || url.password || url.search || url.hash) return false;
|
|
17214
17228
|
return ["/", "/v1", "/v1/"].includes(url.pathname);
|
|
17215
17229
|
}
|
|
17216
|
-
|
|
17230
|
+
function isGoogleChirpModel(model) {
|
|
17231
|
+
return model.startsWith("chirp");
|
|
17232
|
+
}
|
|
17233
|
+
var messageDeliverySchema, backupRetentionPolicySchema, speechToTextProviderSchema, speechToTextBaseUrlSchema, speechToTextApiKeyEnvVarSchema, speechToTextKeytermSchema, speechToTextGoogleLocationSchema, speechToTextGoogleProjectIdSchema, speechToTextLanguageCodeSchema, speechToTextSettingsSchema, speechToTextModelListRequestSchema, attachmentMaxMegabytesSchema, attachmentRetentionSettingsSchema, localRunLimitsSettingsSchema, instanceGeneralSettingsSchema, patchInstanceGeneralSettingsSchema, instanceExperimentalSettingsSchema, patchInstanceExperimentalSettingsSchema, patchInstanceSettingsSchema, MAX_TASK_DRAIN_TTL_MS, startTaskDrainRequestSchema, instanceSettingsSchema;
|
|
17217
17234
|
var init_instance2 = __esm({
|
|
17218
17235
|
"../packages/shared/src/validators/instance.ts"() {
|
|
17219
17236
|
"use strict";
|
|
@@ -17229,20 +17246,69 @@ var init_instance2 = __esm({
|
|
|
17229
17246
|
monthlyMonths: presetSchema(MONTHLY_RETENTION_PRESETS, "monthlyMonths").default(DEFAULT_BACKUP_RETENTION.monthlyMonths),
|
|
17230
17247
|
maxFiles: z40.number().int().min(BACKUP_MAX_FILES_MIN).max(BACKUP_MAX_FILES_MAX).nullable().default(DEFAULT_BACKUP_RETENTION.maxFiles)
|
|
17231
17248
|
});
|
|
17249
|
+
speechToTextProviderSchema = z40.enum(SPEECH_TO_TEXT_PROVIDERS);
|
|
17250
|
+
speechToTextBaseUrlSchema = z40.string().trim().max(2048).refine(isSpeechToTextBaseUrl, {
|
|
17251
|
+
message: "Speech-to-text base URL must be an http(s) origin or end at /v1, without credentials, query or fragment"
|
|
17252
|
+
});
|
|
17253
|
+
speechToTextApiKeyEnvVarSchema = z40.string().trim().max(128).regex(/^(?:[A-Za-z_][A-Za-z0-9_]*)?$/, {
|
|
17254
|
+
message: "Speech-to-text API key must name a server environment variable, not hold the key itself"
|
|
17255
|
+
});
|
|
17256
|
+
speechToTextKeytermSchema = z40.string().trim().min(1).max(SPEECH_TO_TEXT_KEYTERM_MAX_LENGTH).regex(/^[^<>{}[\]\\]+$/, { message: "Keyterms cannot contain < > { } [ ] or \\" });
|
|
17257
|
+
speechToTextGoogleLocationSchema = z40.string().trim().regex(/^[a-z][a-z0-9-]{1,39}$/, { message: "Google speech-to-text location must be global, us, eu or a region such as asia-southeast1" });
|
|
17258
|
+
speechToTextGoogleProjectIdSchema = z40.string().trim().regex(/^(?:[a-z][a-z0-9-]{4,28}[a-z0-9])?$/, { message: "Google Cloud project id must be 6 to 30 lowercase letters, digits or hyphens" });
|
|
17259
|
+
speechToTextLanguageCodeSchema = z40.string().trim().regex(/^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/, { message: "Speech-to-text language must be a code such as en or pt-BR" });
|
|
17232
17260
|
speechToTextSettingsSchema = z40.object({
|
|
17233
17261
|
enabled: z40.boolean().default(SPEECH_TO_TEXT_DEFAULTS.enabled),
|
|
17234
|
-
|
|
17235
|
-
|
|
17236
|
-
}).default(SPEECH_TO_TEXT_DEFAULTS.baseUrl),
|
|
17262
|
+
provider: speechToTextProviderSchema.default(SPEECH_TO_TEXT_DEFAULTS.provider),
|
|
17263
|
+
baseUrl: speechToTextBaseUrlSchema.default(SPEECH_TO_TEXT_DEFAULTS.baseUrl),
|
|
17237
17264
|
model: z40.string().trim().max(200).default(SPEECH_TO_TEXT_DEFAULTS.model),
|
|
17238
|
-
apiKeyEnvVar:
|
|
17239
|
-
|
|
17240
|
-
|
|
17265
|
+
apiKeyEnvVar: speechToTextApiKeyEnvVarSchema.default(SPEECH_TO_TEXT_DEFAULTS.apiKeyEnvVar),
|
|
17266
|
+
language: z40.string().trim().max(35).regex(/^(?:multi|[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*)?$/, {
|
|
17267
|
+
message: "Speech-to-text language must be empty for automatic detection, a language code such as en or pt-BR, or multi"
|
|
17268
|
+
}).default(SPEECH_TO_TEXT_DEFAULTS.language),
|
|
17269
|
+
diarize: z40.boolean().default(SPEECH_TO_TEXT_DEFAULTS.diarize),
|
|
17270
|
+
keyterms: z40.array(speechToTextKeytermSchema).max(SPEECH_TO_TEXT_KEYTERMS_MAX).default(SPEECH_TO_TEXT_DEFAULTS.keyterms),
|
|
17271
|
+
deepgram: z40.object({ smartFormat: z40.boolean().default(SPEECH_TO_TEXT_DEFAULTS.deepgram.smartFormat) }).strict().default(SPEECH_TO_TEXT_DEFAULTS.deepgram),
|
|
17272
|
+
elevenlabs: z40.object({
|
|
17273
|
+
tagAudioEvents: z40.boolean().default(SPEECH_TO_TEXT_DEFAULTS.elevenlabs.tagAudioEvents),
|
|
17274
|
+
numSpeakers: z40.number().int().min(1).max(SPEECH_TO_TEXT_MAX_SPEAKERS).nullable().default(SPEECH_TO_TEXT_DEFAULTS.elevenlabs.numSpeakers)
|
|
17275
|
+
}).strict().default(SPEECH_TO_TEXT_DEFAULTS.elevenlabs),
|
|
17276
|
+
google: z40.object({
|
|
17277
|
+
location: speechToTextGoogleLocationSchema.default(SPEECH_TO_TEXT_DEFAULTS.google.location),
|
|
17278
|
+
projectId: speechToTextGoogleProjectIdSchema.default(SPEECH_TO_TEXT_DEFAULTS.google.projectId),
|
|
17279
|
+
autoPunctuation: z40.boolean().default(SPEECH_TO_TEXT_DEFAULTS.google.autoPunctuation),
|
|
17280
|
+
alternativeLanguages: z40.array(speechToTextLanguageCodeSchema).max(SPEECH_TO_TEXT_GOOGLE_MAX_LANGUAGES - 1).default(SPEECH_TO_TEXT_DEFAULTS.google.alternativeLanguages)
|
|
17281
|
+
}).strict().default(SPEECH_TO_TEXT_DEFAULTS.google),
|
|
17241
17282
|
maxAudioSeconds: z40.number().int().min(1).max(7200).default(SPEECH_TO_TEXT_DEFAULTS.maxAudioSeconds),
|
|
17242
17283
|
sttWaitSeconds: z40.number().int().min(1).max(120).default(SPEECH_TO_TEXT_DEFAULTS.sttWaitSeconds)
|
|
17243
|
-
}).strict().refine(
|
|
17244
|
-
|
|
17284
|
+
}).strict().refine(
|
|
17285
|
+
(value) => !value.enabled || value.model !== "" && value.apiKeyEnvVar !== "" && (value.provider !== "openai_compatible" || value.baseUrl !== ""),
|
|
17286
|
+
{
|
|
17287
|
+
message: "Speech-to-text needs a model, an API key environment variable and, for OpenAI-compatible endpoints, a base URL before it can be enabled"
|
|
17288
|
+
}
|
|
17289
|
+
).superRefine((value, ctx) => {
|
|
17290
|
+
if (value.provider !== "google") return;
|
|
17291
|
+
if (value.language === "multi")
|
|
17292
|
+
ctx.addIssue({ code: "custom", path: ["language"], message: "Google speech-to-text has no multi language; leave it empty for Chirp automatic detection or add alternative languages" });
|
|
17293
|
+
const chirp = isGoogleChirpModel(value.model);
|
|
17294
|
+
if (value.model !== "" && !chirp && value.language === "")
|
|
17295
|
+
ctx.addIssue({ code: "custom", path: ["language"], message: "Google models other than Chirp need a language; only Chirp detects it automatically" });
|
|
17296
|
+
if (value.google.alternativeLanguages.length > 0 && (chirp || value.language === ""))
|
|
17297
|
+
ctx.addIssue({
|
|
17298
|
+
code: "custom",
|
|
17299
|
+
path: ["google", "alternativeLanguages"],
|
|
17300
|
+
message: "Google alternative languages need a primary language and the long, short or telephony model"
|
|
17301
|
+
});
|
|
17245
17302
|
});
|
|
17303
|
+
speechToTextModelListRequestSchema = z40.object({
|
|
17304
|
+
provider: speechToTextProviderSchema,
|
|
17305
|
+
baseUrl: speechToTextBaseUrlSchema.default(""),
|
|
17306
|
+
apiKeyEnvVar: speechToTextApiKeyEnvVarSchema.default(""),
|
|
17307
|
+
google: z40.object({
|
|
17308
|
+
location: speechToTextGoogleLocationSchema.default(SPEECH_TO_TEXT_DEFAULTS.google.location),
|
|
17309
|
+
projectId: speechToTextGoogleProjectIdSchema.default(SPEECH_TO_TEXT_DEFAULTS.google.projectId)
|
|
17310
|
+
}).strict().optional()
|
|
17311
|
+
}).strict();
|
|
17246
17312
|
attachmentMaxMegabytesSchema = z40.number().int().min(ATTACHMENT_MAX_MEGABYTES_MIN).max(ATTACHMENT_MAX_MEGABYTES_MAX);
|
|
17247
17313
|
attachmentRetentionSettingsSchema = z40.object({
|
|
17248
17314
|
enabled: z40.boolean().default(DEFAULT_ATTACHMENT_RETENTION.enabled),
|
|
@@ -17733,7 +17799,7 @@ var init_company_skill = __esm({
|
|
|
17733
17799
|
companySkillSourceTypeSchema = z47.enum(["local_path", "github", "url", "catalog", "skills_sh"]);
|
|
17734
17800
|
companySkillTrustLevelSchema = z47.enum(["markdown_only", "assets", "scripts_executables"]);
|
|
17735
17801
|
companySkillCompatibilitySchema = z47.enum(["compatible", "unknown", "invalid"]);
|
|
17736
|
-
companySkillSourceBadgeSchema = z47.enum(["
|
|
17802
|
+
companySkillSourceBadgeSchema = z47.enum(["wardmote", "github", "local", "url", "catalog", "skills_sh"]);
|
|
17737
17803
|
companySkillSharingScopeSchema = z47.enum(["private", "company", "public_link"]);
|
|
17738
17804
|
companySkillListSortSchema = z47.enum(["alphabetical", "recent", "installs", "stars", "agents", "forks"]);
|
|
17739
17805
|
companySkillListIncludeSchema = z47.enum(["lastEditor"]);
|
|
@@ -20505,7 +20571,7 @@ var init_config_schema = __esm({
|
|
|
20505
20571
|
baseDir: z70.string().default("~/.wardmote/instances/default/data/storage")
|
|
20506
20572
|
}).passthrough();
|
|
20507
20573
|
storageS3ConfigSchema = z70.object({
|
|
20508
|
-
bucket: z70.string().min(1).default("
|
|
20574
|
+
bucket: z70.string().min(1).default("wardmote"),
|
|
20509
20575
|
region: z70.string().min(1).default("us-east-1"),
|
|
20510
20576
|
endpoint: z70.string().optional(),
|
|
20511
20577
|
prefix: z70.string().default(""),
|
|
@@ -20517,7 +20583,7 @@ var init_config_schema = __esm({
|
|
|
20517
20583
|
baseDir: "~/.wardmote/instances/default/data/storage"
|
|
20518
20584
|
}),
|
|
20519
20585
|
s3: storageS3ConfigSchema.default({
|
|
20520
|
-
bucket: "
|
|
20586
|
+
bucket: "wardmote",
|
|
20521
20587
|
region: "us-east-1",
|
|
20522
20588
|
prefix: "",
|
|
20523
20589
|
forcePathStyle: false
|
|
@@ -20582,7 +20648,7 @@ var init_config_schema = __esm({
|
|
|
20582
20648
|
baseDir: "~/.wardmote/instances/default/data/storage"
|
|
20583
20649
|
},
|
|
20584
20650
|
s3: {
|
|
20585
|
-
bucket: "
|
|
20651
|
+
bucket: "wardmote",
|
|
20586
20652
|
region: "us-east-1",
|
|
20587
20653
|
prefix: "",
|
|
20588
20654
|
forcePathStyle: false
|
|
@@ -20886,7 +20952,7 @@ var init_feature_catalog = __esm({
|
|
|
20886
20952
|
},
|
|
20887
20953
|
enableBetaSkills: {
|
|
20888
20954
|
title: "Beta skills",
|
|
20889
|
-
description: "Allow agents to pin beta releases of the core
|
|
20955
|
+
description: "Allow agents to pin beta releases of the core wardmote skill.",
|
|
20890
20956
|
selfHostedDefault: false
|
|
20891
20957
|
},
|
|
20892
20958
|
enableSummaries: {
|
|
@@ -21730,7 +21796,7 @@ var init_announcements = __esm({
|
|
|
21730
21796
|
secondaryLink: announcementActionSchema.optional(),
|
|
21731
21797
|
primaryAction: announcementActionSchema,
|
|
21732
21798
|
expiresAt: z80.string().datetime({ offset: true }).optional(),
|
|
21733
|
-
|
|
21799
|
+
minimumWardmoteVersion: z80.string().regex(/^\d+\.\d+\.\d+$/).optional()
|
|
21734
21800
|
}).strict().refine((value) => !value.animation || Boolean(value.image), {
|
|
21735
21801
|
message: "An animation requires a static fallback image",
|
|
21736
21802
|
path: ["image"]
|
|
@@ -21917,7 +21983,7 @@ var init_openwa_tools = __esm({
|
|
|
21917
21983
|
"read",
|
|
21918
21984
|
"List OpenWA gateway operations with category and availability on this engine and key. Filter by category or text; page with cursor.",
|
|
21919
21985
|
{
|
|
21920
|
-
category: z81.enum(["read", "write", "wa_admin", "gateway_admin", "
|
|
21986
|
+
category: z81.enum(["read", "write", "wa_admin", "gateway_admin", "wardmote"]).optional(),
|
|
21921
21987
|
query: z81.string().min(1).max(100).optional(),
|
|
21922
21988
|
cursor: cursor2
|
|
21923
21989
|
}
|
|
@@ -26727,6 +26793,13 @@ var init_wardmote_updates = __esm({
|
|
|
26727
26793
|
}
|
|
26728
26794
|
});
|
|
26729
26795
|
|
|
26796
|
+
// ../packages/shared/src/speech-to-text-languages.ts
|
|
26797
|
+
var init_speech_to_text_languages = __esm({
|
|
26798
|
+
"../packages/shared/src/speech-to-text-languages.ts"() {
|
|
26799
|
+
"use strict";
|
|
26800
|
+
}
|
|
26801
|
+
});
|
|
26802
|
+
|
|
26730
26803
|
// ../packages/shared/src/index.ts
|
|
26731
26804
|
var init_src = __esm({
|
|
26732
26805
|
"../packages/shared/src/index.ts"() {
|
|
@@ -26875,6 +26948,7 @@ var init_src = __esm({
|
|
|
26875
26948
|
init_agent_lifecycle();
|
|
26876
26949
|
init_fast_response();
|
|
26877
26950
|
init_wardmote_updates();
|
|
26951
|
+
init_speech_to_text_languages();
|
|
26878
26952
|
}
|
|
26879
26953
|
});
|
|
26880
26954
|
|
|
@@ -27968,7 +28042,7 @@ async function promptDatabase(current) {
|
|
|
27968
28042
|
const value = await p.text({
|
|
27969
28043
|
message: "PostgreSQL connection string",
|
|
27970
28044
|
defaultValue: connectionStringDefault,
|
|
27971
|
-
placeholder: "postgres://user:pass@localhost:5432/
|
|
28045
|
+
placeholder: "postgres://user:pass@localhost:5432/wardmote",
|
|
27972
28046
|
validate: (val) => {
|
|
27973
28047
|
const candidate = val || connectionStringDefault;
|
|
27974
28048
|
if (!candidate) return "Connection string is required for PostgreSQL mode";
|
|
@@ -28261,7 +28335,7 @@ function defaultStorageConfig() {
|
|
|
28261
28335
|
baseDir: defaultStorageBaseDir()
|
|
28262
28336
|
},
|
|
28263
28337
|
s3: {
|
|
28264
|
-
bucket: "
|
|
28338
|
+
bucket: "wardmote",
|
|
28265
28339
|
region: "us-east-1",
|
|
28266
28340
|
endpoint: void 0,
|
|
28267
28341
|
prefix: "",
|
|
@@ -28313,12 +28387,12 @@ async function promptStorage(current) {
|
|
|
28313
28387
|
s3: base.s3
|
|
28314
28388
|
};
|
|
28315
28389
|
}
|
|
28316
|
-
const bucketDefault = base.s3.bucket || "
|
|
28390
|
+
const bucketDefault = base.s3.bucket || "wardmote";
|
|
28317
28391
|
const regionDefault = base.s3.region || "us-east-1";
|
|
28318
28392
|
const bucket = await p5.text({
|
|
28319
28393
|
message: "S3 bucket",
|
|
28320
28394
|
defaultValue: bucketDefault,
|
|
28321
|
-
placeholder: "
|
|
28395
|
+
placeholder: "wardmote",
|
|
28322
28396
|
validate: (value) => {
|
|
28323
28397
|
if ((value || bucketDefault).trim().length === 0) return "Bucket is required";
|
|
28324
28398
|
}
|
|
@@ -28351,7 +28425,7 @@ async function promptStorage(current) {
|
|
|
28351
28425
|
const prefix = await p5.text({
|
|
28352
28426
|
message: "Object key prefix (optional)",
|
|
28353
28427
|
defaultValue: base.s3.prefix ?? "",
|
|
28354
|
-
placeholder: "
|
|
28428
|
+
placeholder: "wardmote/"
|
|
28355
28429
|
});
|
|
28356
28430
|
if (p5.isCancel(prefix)) {
|
|
28357
28431
|
p5.cancel("Setup cancelled.");
|
|
@@ -30997,7 +31071,7 @@ var init_chat_channels3 = __esm({
|
|
|
30997
31071
|
companyId: uuid17("company_id").notNull().references(() => companies.id, { onDelete: "cascade" }),
|
|
30998
31072
|
endpointId: uuid17("endpoint_id").notNull(),
|
|
30999
31073
|
principalId: uuid17("principal_id").notNull(),
|
|
31000
|
-
wardmoteUserId: text23("
|
|
31074
|
+
wardmoteUserId: text23("wardmote_user_id"),
|
|
31001
31075
|
status: text23("status").$type().notNull().default("pending"),
|
|
31002
31076
|
confirmationTokenHash: text23("confirmation_token_hash"),
|
|
31003
31077
|
expiresAt: timestamp18("expires_at", { withTimezone: true }),
|
|
@@ -35994,9 +36068,9 @@ var init_feedback_exports = __esm({
|
|
|
35994
36068
|
destination: text98("destination"),
|
|
35995
36069
|
exportId: text98("export_id"),
|
|
35996
36070
|
consentVersion: text98("consent_version"),
|
|
35997
|
-
schemaVersion: text98("schema_version").notNull().default("
|
|
35998
|
-
bundleVersion: text98("bundle_version").notNull().default("
|
|
35999
|
-
payloadVersion: text98("payload_version").notNull().default("
|
|
36071
|
+
schemaVersion: text98("schema_version").notNull().default("wardmote-feedback-envelope-v2"),
|
|
36072
|
+
bundleVersion: text98("bundle_version").notNull().default("wardmote-feedback-bundle-v2"),
|
|
36073
|
+
payloadVersion: text98("payload_version").notNull().default("wardmote-feedback-v1"),
|
|
36000
36074
|
payloadDigest: text98("payload_digest"),
|
|
36001
36075
|
payloadSnapshot: jsonb61("payload_snapshot"),
|
|
36002
36076
|
targetSummary: jsonb61("target_summary").notNull(),
|
|
@@ -41063,6 +41137,15 @@ var init_schema2 = __esm({
|
|
|
41063
41137
|
}
|
|
41064
41138
|
});
|
|
41065
41139
|
|
|
41140
|
+
// ../packages/db/src/retired-migration-lock.ts
|
|
41141
|
+
var RETIRED_MIGRATION_LOCK_KEY;
|
|
41142
|
+
var init_retired_migration_lock = __esm({
|
|
41143
|
+
"../packages/db/src/retired-migration-lock.ts"() {
|
|
41144
|
+
"use strict";
|
|
41145
|
+
RETIRED_MIGRATION_LOCK_KEY = "paperclip:migrations";
|
|
41146
|
+
}
|
|
41147
|
+
});
|
|
41148
|
+
|
|
41066
41149
|
// ../packages/db/src/client.ts
|
|
41067
41150
|
import { createHash as createHash2 } from "node:crypto";
|
|
41068
41151
|
import { drizzle as drizzlePg } from "drizzle-orm/postgres-js";
|
|
@@ -41207,7 +41290,7 @@ function createDbClient(url, resolved, owner) {
|
|
|
41207
41290
|
dedicatedDbFactories.set(db, () => createDbClient(url, {
|
|
41208
41291
|
...resolved,
|
|
41209
41292
|
maxConnections: 1,
|
|
41210
|
-
applicationName: "
|
|
41293
|
+
applicationName: "wardmote-workspace-finalization-lock"
|
|
41211
41294
|
}, db));
|
|
41212
41295
|
return db;
|
|
41213
41296
|
}
|
|
@@ -41347,8 +41430,11 @@ async function applyPendingMigrationsManually(url, pendingMigrations) {
|
|
|
41347
41430
|
try {
|
|
41348
41431
|
const sql72 = await pool.reserve();
|
|
41349
41432
|
try {
|
|
41350
|
-
|
|
41351
|
-
|
|
41433
|
+
for (; ; ) {
|
|
41434
|
+
const [held] = await sql72.unsafe(MIGRATION_LOCK_TRY_SQL);
|
|
41435
|
+
if (held?.current && held.retired) break;
|
|
41436
|
+
if (held?.current) await sql72.unsafe(`SELECT pg_advisory_unlock(hashtextextended('${MIGRATION_LOCK_KEY}', 0))`);
|
|
41437
|
+
if (held?.retired) await sql72.unsafe(`SELECT pg_advisory_unlock(hashtextextended('${RETIRED_MIGRATION_LOCK_KEY}', 0))`);
|
|
41352
41438
|
await new Promise((resolve3) => setTimeout(resolve3, 100));
|
|
41353
41439
|
}
|
|
41354
41440
|
const { migrationTableSchema, columnNames } = await ensureMigrationJournalTable(sql72);
|
|
@@ -41402,7 +41488,7 @@ async function applyPendingMigrationsManually(url, pendingMigrations) {
|
|
|
41402
41488
|
}
|
|
41403
41489
|
} finally {
|
|
41404
41490
|
try {
|
|
41405
|
-
await sql72
|
|
41491
|
+
await sql72.unsafe(MIGRATION_LOCK_RELEASE_SQL);
|
|
41406
41492
|
} catch {
|
|
41407
41493
|
}
|
|
41408
41494
|
sql72.release();
|
|
@@ -41880,15 +41966,19 @@ async function resetPostgresDatabase(url, databaseName) {
|
|
|
41880
41966
|
await sql72.end();
|
|
41881
41967
|
}
|
|
41882
41968
|
}
|
|
41883
|
-
var MIGRATIONS_FOLDER, DRIZZLE_MIGRATIONS_TABLE, MIGRATIONS_JOURNAL_JSON, clientsByHostPort, clientFinalizer, DEFAULT_DATABASE_IDLE_TIMEOUT_SECONDS, DEFAULT_DATABASE_APPLICATION_NAME, dedicatedDbFactories, MIGRATIONS_WITH_TOP_LEVEL_STATEMENTS;
|
|
41969
|
+
var MIGRATIONS_FOLDER, DRIZZLE_MIGRATIONS_TABLE, MIGRATIONS_JOURNAL_JSON, MIGRATION_LOCK_KEY, MIGRATION_LOCK_TRY_SQL, MIGRATION_LOCK_RELEASE_SQL, clientsByHostPort, clientFinalizer, DEFAULT_DATABASE_IDLE_TIMEOUT_SECONDS, DEFAULT_DATABASE_APPLICATION_NAME, dedicatedDbFactories, MIGRATIONS_WITH_TOP_LEVEL_STATEMENTS;
|
|
41884
41970
|
var init_client = __esm({
|
|
41885
41971
|
"../packages/db/src/client.ts"() {
|
|
41886
41972
|
"use strict";
|
|
41887
41973
|
init_work_signals();
|
|
41888
41974
|
init_schema2();
|
|
41975
|
+
init_retired_migration_lock();
|
|
41889
41976
|
MIGRATIONS_FOLDER = fileURLToPath2(new URL("./migrations", import.meta.url));
|
|
41890
41977
|
DRIZZLE_MIGRATIONS_TABLE = "__drizzle_migrations";
|
|
41891
41978
|
MIGRATIONS_JOURNAL_JSON = fileURLToPath2(new URL("./migrations/meta/_journal.json", import.meta.url));
|
|
41979
|
+
MIGRATION_LOCK_KEY = "wardmote:migrations";
|
|
41980
|
+
MIGRATION_LOCK_TRY_SQL = `SELECT pg_try_advisory_lock(hashtextextended('${MIGRATION_LOCK_KEY}', 0)) AS current, pg_try_advisory_lock(hashtextextended('${RETIRED_MIGRATION_LOCK_KEY}', 0)) AS retired`;
|
|
41981
|
+
MIGRATION_LOCK_RELEASE_SQL = `SELECT pg_advisory_unlock(hashtextextended('${MIGRATION_LOCK_KEY}', 0)), pg_advisory_unlock(hashtextextended('${RETIRED_MIGRATION_LOCK_KEY}', 0))`;
|
|
41892
41982
|
clientsByHostPort = /* @__PURE__ */ new Map();
|
|
41893
41983
|
clientFinalizer = new FinalizationRegistry(
|
|
41894
41984
|
({ hostPortKey: hostPortKey2, ref }) => {
|
|
@@ -47886,6 +47976,16 @@ var init_test_embedded_postgres = __esm({
|
|
|
47886
47976
|
}
|
|
47887
47977
|
});
|
|
47888
47978
|
|
|
47979
|
+
// ../packages/db/src/retired-backup-names.ts
|
|
47980
|
+
var RETIRED_BACKUP_FILENAME_PREFIX, RETIRED_STATEMENT_BREAKPOINT;
|
|
47981
|
+
var init_retired_backup_names = __esm({
|
|
47982
|
+
"../packages/db/src/retired-backup-names.ts"() {
|
|
47983
|
+
"use strict";
|
|
47984
|
+
RETIRED_BACKUP_FILENAME_PREFIX = "paperclip";
|
|
47985
|
+
RETIRED_STATEMENT_BREAKPOINT = "-- paperclip statement breakpoint 69f6f3f1-42fd-46a6-bf17-d1d85f8f3900";
|
|
47986
|
+
}
|
|
47987
|
+
});
|
|
47988
|
+
|
|
47889
47989
|
// ../packages/db/src/backup-lib.ts
|
|
47890
47990
|
import { createReadStream, createWriteStream, existsSync, mkdirSync, readdirSync, renameSync, rmSync, statfsSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
47891
47991
|
import { basename, join as join2, resolve as resolve2 } from "node:path";
|
|
@@ -47897,6 +47997,9 @@ import { pipeline } from "node:stream/promises";
|
|
|
47897
47997
|
import { createGunzip, createGzip } from "node:zlib";
|
|
47898
47998
|
import postgres3 from "postgres";
|
|
47899
47999
|
import { randomUUID as randomUUID3 } from "node:crypto";
|
|
48000
|
+
function isStatementBreakpoint(line) {
|
|
48001
|
+
return line === STATEMENT_BREAKPOINT || line === RETIRED_STATEMENT_BREAKPOINT;
|
|
48002
|
+
}
|
|
47900
48003
|
function sanitizeRestoreErrorMessage(error) {
|
|
47901
48004
|
if (error && typeof error === "object") {
|
|
47902
48005
|
const record2 = error;
|
|
@@ -48155,9 +48258,9 @@ function formatBackupSize(sizeBytes) {
|
|
|
48155
48258
|
}
|
|
48156
48259
|
function formatSqlLiteral(value) {
|
|
48157
48260
|
const sanitized = value.replace(/\u0000/g, "");
|
|
48158
|
-
let tag = "$
|
|
48261
|
+
let tag = "$wardmote$";
|
|
48159
48262
|
while (sanitized.includes(tag)) {
|
|
48160
|
-
tag = `$
|
|
48263
|
+
tag = `$wardmote_${Math.random().toString(36).slice(2, 8)}$`;
|
|
48161
48264
|
}
|
|
48162
48265
|
return `${tag}${sanitized}${tag}`;
|
|
48163
48266
|
}
|
|
@@ -48310,10 +48413,10 @@ async function hasStatementBreakpoints(backupFile) {
|
|
|
48310
48413
|
try {
|
|
48311
48414
|
for await (const chunk of stream) {
|
|
48312
48415
|
text169 += Buffer.isBuffer(chunk) ? chunk.toString("utf8") : String(chunk);
|
|
48313
|
-
if (text169.includes(STATEMENT_BREAKPOINT)) return true;
|
|
48416
|
+
if (text169.includes(STATEMENT_BREAKPOINT) || text169.includes(RETIRED_STATEMENT_BREAKPOINT)) return true;
|
|
48314
48417
|
if (Buffer.byteLength(text169, "utf8") >= BACKUP_BREAKPOINT_DETECT_BYTES) return false;
|
|
48315
48418
|
}
|
|
48316
|
-
return text169.includes(STATEMENT_BREAKPOINT);
|
|
48419
|
+
return text169.includes(STATEMENT_BREAKPOINT) || text169.includes(RETIRED_STATEMENT_BREAKPOINT);
|
|
48317
48420
|
} finally {
|
|
48318
48421
|
stream.destroy();
|
|
48319
48422
|
raw.destroy();
|
|
@@ -48335,7 +48438,7 @@ async function* readRestoreStatements(backupFile) {
|
|
|
48335
48438
|
};
|
|
48336
48439
|
try {
|
|
48337
48440
|
for await (const line of reader) {
|
|
48338
|
-
if (line
|
|
48441
|
+
if (isStatementBreakpoint(line)) {
|
|
48339
48442
|
const statement = flushStatement();
|
|
48340
48443
|
if (statement.length > 0) {
|
|
48341
48444
|
yield statement;
|
|
@@ -48959,15 +49062,16 @@ function formatDatabaseBackupResult(result) {
|
|
|
48959
49062
|
const unreadable = result.unreadableBackups?.length ? `; kept ${result.unreadableBackups.length} unreadable backup(s)` : "";
|
|
48960
49063
|
return `${result.backupFile} (${size}${pruned}${unreadable})`;
|
|
48961
49064
|
}
|
|
48962
|
-
var DEFAULT_BACKUP_WRITE_BUFFER_BYTES, BACKUP_DATA_CURSOR_ROWS, BACKUP_CLI_STDERR_BYTES, BACKUP_BREAKPOINT_DETECT_BYTES, STATEMENT_BREAKPOINT, DATABASE_BACKUP_FILENAME_PREFIX, PINNED_BACKUP_DIRNAME, DATABASE_BACKUP_SKIPPED_MARKER, DEFAULT_BACKUP_HEADROOM_FACTOR, DAY_MS2, DatabaseBackupSkippedError, verifiedBackups,
|
|
49065
|
+
var DEFAULT_BACKUP_WRITE_BUFFER_BYTES, BACKUP_DATA_CURSOR_ROWS, BACKUP_CLI_STDERR_BYTES, BACKUP_BREAKPOINT_DETECT_BYTES, STATEMENT_BREAKPOINT, DATABASE_BACKUP_FILENAME_PREFIX, PINNED_BACKUP_DIRNAME, DATABASE_BACKUP_SKIPPED_MARKER, DEFAULT_BACKUP_HEADROOM_FACTOR, DAY_MS2, DatabaseBackupSkippedError, verifiedBackups, PARTIAL_BACKUP_PATTERN, ABANDONED_PARTIAL_BACKUP_AGE_MS, activePartialBackupFiles;
|
|
48963
49066
|
var init_backup_lib = __esm({
|
|
48964
49067
|
"../packages/db/src/backup-lib.ts"() {
|
|
48965
49068
|
"use strict";
|
|
49069
|
+
init_retired_backup_names();
|
|
48966
49070
|
DEFAULT_BACKUP_WRITE_BUFFER_BYTES = 1024 * 1024;
|
|
48967
49071
|
BACKUP_DATA_CURSOR_ROWS = 100;
|
|
48968
49072
|
BACKUP_CLI_STDERR_BYTES = 64 * 1024;
|
|
48969
49073
|
BACKUP_BREAKPOINT_DETECT_BYTES = 64 * 1024;
|
|
48970
|
-
STATEMENT_BREAKPOINT = "--
|
|
49074
|
+
STATEMENT_BREAKPOINT = "-- wardmote statement breakpoint 69f6f3f1-42fd-46a6-bf17-d1d85f8f3900";
|
|
48971
49075
|
DATABASE_BACKUP_FILENAME_PREFIX = "wardmote";
|
|
48972
49076
|
PINNED_BACKUP_DIRNAME = "pinned";
|
|
48973
49077
|
DATABASE_BACKUP_SKIPPED_MARKER = "backup-skipped.json";
|
|
@@ -48989,7 +49093,6 @@ var init_backup_lib = __esm({
|
|
|
48989
49093
|
code = "database_backup_skipped_low_disk";
|
|
48990
49094
|
};
|
|
48991
49095
|
verifiedBackups = /* @__PURE__ */ new Map();
|
|
48992
|
-
RETIRED_BACKUP_FILENAME_PREFIX = "paperclip";
|
|
48993
49096
|
PARTIAL_BACKUP_PATTERN = /\.(\d+)\.partial$/;
|
|
48994
49097
|
ABANDONED_PARTIAL_BACKUP_AGE_MS = 24 * 60 * 60 * 1e3;
|
|
48995
49098
|
activePartialBackupFiles = /* @__PURE__ */ new Set();
|
|
@@ -49734,7 +49837,7 @@ var init_client2 = __esm({
|
|
|
49734
49837
|
buildEnvelope(events, batchId) {
|
|
49735
49838
|
const state = this.getState();
|
|
49736
49839
|
return {
|
|
49737
|
-
app: this.config.app ?? "
|
|
49840
|
+
app: this.config.app ?? "wardmote",
|
|
49738
49841
|
schemaVersion: this.config.schemaVersion ?? "1",
|
|
49739
49842
|
installId: state.installId,
|
|
49740
49843
|
version: this.version,
|
|
@@ -50501,7 +50604,7 @@ var init_release_packages = __esm({
|
|
|
50501
50604
|
"@tickernelz/wardmote",
|
|
50502
50605
|
"@tickernelz/wardmote-adapter-omp-local",
|
|
50503
50606
|
"@tickernelz/wardmote-adapter-utils",
|
|
50504
|
-
"@tickernelz/wardmote-create-
|
|
50607
|
+
"@tickernelz/wardmote-create-plugin",
|
|
50505
50608
|
"@tickernelz/wardmote-db",
|
|
50506
50609
|
"@tickernelz/wardmote-mcp-server",
|
|
50507
50610
|
"@tickernelz/wardmote-plugin-cloudflare-sandbox",
|
|
@@ -50614,9 +50717,26 @@ async function resolvePublishedVersion(spec, runCommand2) {
|
|
|
50614
50717
|
);
|
|
50615
50718
|
return parseResolvedVersion(result.stdout);
|
|
50616
50719
|
}
|
|
50720
|
+
async function resolveReleasePackageNames(version, runCommand2) {
|
|
50721
|
+
try {
|
|
50722
|
+
const result = await runCommand2(
|
|
50723
|
+
"npm",
|
|
50724
|
+
["view", `@tickernelz/wardmote@${version}`, "wardmoteReleasePackages", "--json", `--registry=${PUBLIC_NPM_REGISTRY}`],
|
|
50725
|
+
{ maxBuffer: 1024 * 1024 }
|
|
50726
|
+
);
|
|
50727
|
+
const declared = JSON.parse(result.stdout.trim() || "null");
|
|
50728
|
+
if (Array.isArray(declared) && declared.length > 0 && declared.every((name) => typeof name === "string" && name.startsWith("@tickernelz/"))) {
|
|
50729
|
+
return declared;
|
|
50730
|
+
}
|
|
50731
|
+
} catch {
|
|
50732
|
+
return RELEASE_PACKAGE_NAMES;
|
|
50733
|
+
}
|
|
50734
|
+
return RELEASE_PACKAGE_NAMES;
|
|
50735
|
+
}
|
|
50617
50736
|
async function assertReleaseSetPublished(version, runCommand2) {
|
|
50737
|
+
const names = await resolveReleasePackageNames(version, runCommand2);
|
|
50618
50738
|
const missing = [];
|
|
50619
|
-
const queue = [...
|
|
50739
|
+
const queue = [...names];
|
|
50620
50740
|
const probe = async () => {
|
|
50621
50741
|
for (let name = queue.pop(); name !== void 0; name = queue.pop()) {
|
|
50622
50742
|
try {
|
|
@@ -50631,10 +50751,10 @@ async function assertReleaseSetPublished(version, runCommand2) {
|
|
|
50631
50751
|
}
|
|
50632
50752
|
}
|
|
50633
50753
|
};
|
|
50634
|
-
await Promise.all(Array.from({ length: Math.min(8,
|
|
50754
|
+
await Promise.all(Array.from({ length: Math.min(8, names.length) }, probe));
|
|
50635
50755
|
if (missing.length > 0) {
|
|
50636
50756
|
throw new Error(
|
|
50637
|
-
`Release ${version} is incomplete on ${PUBLIC_NPM_REGISTRY}: ${missing.length} of ${
|
|
50757
|
+
`Release ${version} is incomplete on ${PUBLIC_NPM_REGISTRY}: ${missing.length} of ${names.length} packages are not published at that version (${missing.sort().join(", ")}). Installing it would mix versions across packages. Wait for the release to finish publishing, or pass --version with a complete release.`
|
|
50638
50758
|
);
|
|
50639
50759
|
}
|
|
50640
50760
|
}
|
|
@@ -50910,7 +51030,7 @@ async function installCommand(options, dependencies = {}) {
|
|
|
50910
51030
|
const request = resolveNpmInstallRequest(options);
|
|
50911
51031
|
console.log(`Resolving @tickernelz/wardmote@${request.spec} from ${PUBLIC_NPM_REGISTRY}...`);
|
|
50912
51032
|
const version = await resolvePublishedVersion(request.spec, runCommand2);
|
|
50913
|
-
console.log(`Verifying
|
|
51033
|
+
console.log(`Verifying the packages of release ${version}...`);
|
|
50914
51034
|
await assertReleaseSetPublished(version, runCommand2);
|
|
50915
51035
|
console.log(`Installing @tickernelz/wardmote@${version}...`);
|
|
50916
51036
|
const paths = resolveInstallStorePaths();
|
|
@@ -51918,7 +52038,7 @@ async function createSshAuthArgs(config) {
|
|
|
51918
52038
|
];
|
|
51919
52039
|
if (config.strictHostKeyChecking) {
|
|
51920
52040
|
if (config.knownHosts) {
|
|
51921
|
-
const knownHosts = await withTempFile("
|
|
52041
|
+
const knownHosts = await withTempFile("wardmote-ssh-known-hosts-", config.knownHosts, 384);
|
|
51922
52042
|
tempFiles.push(knownHosts.cleanup);
|
|
51923
52043
|
sshArgs.push("-o", `UserKnownHostsFile=${knownHosts.path}`);
|
|
51924
52044
|
}
|
|
@@ -51926,7 +52046,7 @@ async function createSshAuthArgs(config) {
|
|
|
51926
52046
|
sshArgs.push("-o", "UserKnownHostsFile=/dev/null");
|
|
51927
52047
|
}
|
|
51928
52048
|
if (config.privateKey) {
|
|
51929
|
-
const privateKey = await withTempFile("
|
|
52049
|
+
const privateKey = await withTempFile("wardmote-ssh-key-", config.privateKey, 384);
|
|
51930
52050
|
tempFiles.push(privateKey.cleanup);
|
|
51931
52051
|
sshArgs.push("-i", privateKey.path);
|
|
51932
52052
|
}
|
|
@@ -61289,7 +61409,7 @@ import pc7 from "picocolors";
|
|
|
61289
61409
|
async function doctor(opts) {
|
|
61290
61410
|
await printUpdateNotice(opts.config);
|
|
61291
61411
|
printWardmoteCliBanner();
|
|
61292
|
-
p10.intro(pc7.bgCyan(pc7.black("
|
|
61412
|
+
p10.intro(pc7.bgCyan(pc7.black(" wardmote doctor ")));
|
|
61293
61413
|
const configPath = resolveConfigPath(opts.config);
|
|
61294
61414
|
loadWardmoteEnvFile(configPath);
|
|
61295
61415
|
const results = [];
|
|
@@ -62115,7 +62235,7 @@ function buildWorktreeConfig(input2) {
|
|
|
62115
62235
|
baseDir: paths.storageDir
|
|
62116
62236
|
},
|
|
62117
62237
|
s3: {
|
|
62118
|
-
bucket: source?.storage.s3.bucket ?? "
|
|
62238
|
+
bucket: source?.storage.s3.bucket ?? "wardmote",
|
|
62119
62239
|
region: source?.storage.s3.region ?? "us-east-1",
|
|
62120
62240
|
endpoint: source?.storage.s3.endpoint,
|
|
62121
62241
|
prefix: source?.storage.s3.prefix ?? "",
|
|
@@ -65255,7 +65375,7 @@ async function worktreeListCommand(opts) {
|
|
|
65255
65375
|
for (const choice of choices) {
|
|
65256
65376
|
const flags = [
|
|
65257
65377
|
choice.isCurrent ? "current" : null,
|
|
65258
|
-
choice.hasWardmoteConfig ? "
|
|
65378
|
+
choice.hasWardmoteConfig ? "wardmote" : "no-wardmote-config"
|
|
65259
65379
|
].filter((value) => value !== null);
|
|
65260
65380
|
p11.log.message(`${choice.branchLabel} ${choice.worktree} [${flags.join(", ")}]`);
|
|
65261
65381
|
}
|
|
@@ -68012,7 +68132,7 @@ function collectDeploymentEnvRows(config, configPath) {
|
|
|
68012
68132
|
const secretsKeyFilePath = process.env.WARDMOTE_SECRETS_MASTER_KEY_FILE ?? config?.secrets?.localEncrypted?.keyFilePath ?? defaultSecretsKeyFilePath();
|
|
68013
68133
|
const storageProvider = process.env.WARDMOTE_STORAGE_PROVIDER ?? config?.storage?.provider ?? DEFAULT_STORAGE_PROVIDER;
|
|
68014
68134
|
const storageLocalDir = process.env.WARDMOTE_STORAGE_LOCAL_DIR ?? config?.storage?.localDisk?.baseDir ?? defaultStorageBaseDir2();
|
|
68015
|
-
const storageS3Bucket = process.env.WARDMOTE_STORAGE_S3_BUCKET ?? config?.storage?.s3?.bucket ?? "
|
|
68135
|
+
const storageS3Bucket = process.env.WARDMOTE_STORAGE_S3_BUCKET ?? config?.storage?.s3?.bucket ?? "wardmote";
|
|
68016
68136
|
const storageS3Region = process.env.WARDMOTE_STORAGE_S3_REGION ?? config?.storage?.s3?.region ?? "us-east-1";
|
|
68017
68137
|
const storageS3Endpoint = process.env.WARDMOTE_STORAGE_S3_ENDPOINT ?? config?.storage?.s3?.endpoint ?? "";
|
|
68018
68138
|
const storageS3Prefix = process.env.WARDMOTE_STORAGE_S3_PREFIX ?? config?.storage?.s3?.prefix ?? "";
|
|
@@ -68272,7 +68392,7 @@ async function channelsCommand(options = {}, runCommand2 = defaultRunCommand) {
|
|
|
68272
68392
|
} else {
|
|
68273
68393
|
console.log(`This install is version ${pc12.bold(packageVersion)} on the ${pc12.bold(currentChannel)} channel.`);
|
|
68274
68394
|
}
|
|
68275
|
-
console.log(
|
|
68395
|
+
console.log("Docker images are built from source; see doc/DOCKER.md.");
|
|
68276
68396
|
}
|
|
68277
68397
|
|
|
68278
68398
|
// src/commands/configure.ts
|
|
@@ -68342,7 +68462,7 @@ function defaultConfig() {
|
|
|
68342
68462
|
}
|
|
68343
68463
|
async function configure(opts) {
|
|
68344
68464
|
printWardmoteCliBanner();
|
|
68345
|
-
p15.intro(pc13.bgCyan(pc13.black("
|
|
68465
|
+
p15.intro(pc13.bgCyan(pc13.black(" wardmote configure ")));
|
|
68346
68466
|
const configPath = resolveConfigPath(opts.config);
|
|
68347
68467
|
if (!configExists(opts.config)) {
|
|
68348
68468
|
p15.log.error("No config file found. Run `wardmote onboard` first.");
|
|
@@ -69336,7 +69456,7 @@ function resolveBackupDir(raw) {
|
|
|
69336
69456
|
}
|
|
69337
69457
|
async function dbBackupCommand(opts) {
|
|
69338
69458
|
printWardmoteCliBanner();
|
|
69339
|
-
p17.intro(pc17.bgCyan(pc17.black("
|
|
69459
|
+
p17.intro(pc17.bgCyan(pc17.black(" wardmote db:backup ")));
|
|
69340
69460
|
const configPath = resolveConfigPath(opts.config);
|
|
69341
69461
|
const config = readConfig(opts.config);
|
|
69342
69462
|
const connection = resolveConnectionString(opts.config);
|
|
@@ -71611,11 +71731,8 @@ function registerCompanyCommands(program2) {
|
|
|
71611
71731
|
})
|
|
71612
71732
|
);
|
|
71613
71733
|
addCommonClientOptions(
|
|
71614
|
-
company.command("import").description("Import a portable markdown company package from local path, URL, or GitHub").argument("<fromPathOrUrl>", "Source path or URL").option("--include <values>", "Comma-separated include set: company,agents,projects,issues,tasks,skills").option("--target <mode>", "Target mode: new | existing").option("-C, --company-id <id>", "Existing target company ID").option("--new-company-name <name>", "Name override for --target new").option("--agents <list>", "Comma-separated agent slugs to import, or all", "all").option("--collision <mode>", "Collision strategy: rename | skip | replace", "rename").option("--ref <value>", "Git ref to use for GitHub imports (branch, tag, or commit)").option("--
|
|
71734
|
+
company.command("import").description("Import a portable markdown company package from local path, URL, or GitHub").argument("<fromPathOrUrl>", "Source path or URL").option("--include <values>", "Comma-separated include set: company,agents,projects,issues,tasks,skills").option("--target <mode>", "Target mode: new | existing").option("-C, --company-id <id>", "Existing target company ID").option("--new-company-name <name>", "Name override for --target new").option("--agents <list>", "Comma-separated agent slugs to import, or all", "all").option("--collision <mode>", "Collision strategy: rename | skip | replace", "rename").option("--ref <value>", "Git ref to use for GitHub imports (branch, tag, or commit)").option("--yes", "Accept default selection and skip the pre-import confirmation prompt", false).option("--dry-run", "Run preview only without applying", false).action(async (fromPathOrUrl, opts) => {
|
|
71615
71735
|
try {
|
|
71616
|
-
if (!opts.apiBase?.trim() && opts.wardmoteUrl?.trim()) {
|
|
71617
|
-
opts.apiBase = opts.wardmoteUrl.trim();
|
|
71618
|
-
}
|
|
71619
71736
|
const ctx = resolveCommandContext(opts);
|
|
71620
71737
|
const interactiveView = isInteractiveTerminal() && !ctx.json;
|
|
71621
71738
|
const from = fromPathOrUrl.trim();
|
|
@@ -76410,7 +76527,7 @@ function packLocalPackage(packagePath, outputDir) {
|
|
|
76410
76527
|
const packageName = packageJson.name ?? path46.basename(packagePath);
|
|
76411
76528
|
const packageVersion2 = packageJson.version ?? "0.0.0";
|
|
76412
76529
|
const tarballFileName = `${packageName.replace(/^@/, "").replace("/", "-")}-${packageVersion2}.tgz`;
|
|
76413
|
-
const sdkBundleDir = path46.join(outputDir, ".
|
|
76530
|
+
const sdkBundleDir = path46.join(outputDir, ".wardmote-sdk");
|
|
76414
76531
|
fs34.mkdirSync(sdkBundleDir, { recursive: true });
|
|
76415
76532
|
execFileSync5("pnpm", ["build"], { cwd: packagePath, stdio: "pipe" });
|
|
76416
76533
|
execFileSync5("pnpm", ["pack", "--pack-destination", sdkBundleDir], { cwd: packagePath, stdio: "pipe" });
|
|
@@ -76466,7 +76583,7 @@ function scaffoldPluginProject(options) {
|
|
|
76466
76583
|
worker: "./dist/worker.js",
|
|
76467
76584
|
ui: "./dist/ui/"
|
|
76468
76585
|
},
|
|
76469
|
-
keywords: ["
|
|
76586
|
+
keywords: ["wardmote", "plugin", category],
|
|
76470
76587
|
author,
|
|
76471
76588
|
license: "MIT",
|
|
76472
76589
|
...packedSharedTarball ? {
|
|
@@ -76956,7 +77073,7 @@ ${sdkDependency.startsWith("file:") ? `This scaffold snapshots \`@tickernelz/war
|
|
|
76956
77073
|
|
|
76957
77074
|
\`${toPosixPath(localSdkPath)}\`
|
|
76958
77075
|
|
|
76959
|
-
The packed tarballs live in \`.
|
|
77076
|
+
The packed tarballs live in \`.wardmote-sdk/\` for local development. Before publishing this plugin, switch those dependencies to published package versions once they are available on npm.
|
|
76960
77077
|
|
|
76961
77078
|
` : ""}
|
|
76962
77079
|
|
|
@@ -76972,7 +77089,7 @@ wardmote plugin install ${shellQuote3(toPosixPath(outputDir))}
|
|
|
76972
77089
|
- \`pnpm build:rollup\` uses rollup presets from the same SDK.
|
|
76973
77090
|
`
|
|
76974
77091
|
);
|
|
76975
|
-
writeFile4(path46.join(outputDir, ".gitignore"), "dist\nnode_modules\n.
|
|
77092
|
+
writeFile4(path46.join(outputDir, ".gitignore"), "dist\nnode_modules\n.wardmote-sdk\n");
|
|
76976
77093
|
return outputDir;
|
|
76977
77094
|
}
|
|
76978
77095
|
|
|
@@ -79509,7 +79626,7 @@ async function listAll(key, path53) {
|
|
|
79509
79626
|
}
|
|
79510
79627
|
function resourceByProfile(resources, profileKey, resourceLabel) {
|
|
79511
79628
|
const matches = resources.filter(
|
|
79512
|
-
(resource) => typeof resource.id === "string" && record(resource.metadata).
|
|
79629
|
+
(resource) => typeof resource.id === "string" && record(resource.metadata).wardmote_profile === profileKey
|
|
79513
79630
|
);
|
|
79514
79631
|
if (matches.length > 1) {
|
|
79515
79632
|
throw new Error(
|
|
@@ -79577,7 +79694,7 @@ async function resolveEnvironment(key, options) {
|
|
|
79577
79694
|
pip: []
|
|
79578
79695
|
}
|
|
79579
79696
|
},
|
|
79580
|
-
metadata: {
|
|
79697
|
+
metadata: { wardmote_profile: options.profileKey }
|
|
79581
79698
|
});
|
|
79582
79699
|
assertSafeManagedEnvironment(environment);
|
|
79583
79700
|
return environment;
|
|
@@ -79612,7 +79729,7 @@ async function resolveAgent3(key, options) {
|
|
|
79612
79729
|
tools: [],
|
|
79613
79730
|
mcp_servers: [],
|
|
79614
79731
|
skills: [],
|
|
79615
|
-
metadata: {
|
|
79732
|
+
metadata: { wardmote_profile: options.profileKey }
|
|
79616
79733
|
});
|
|
79617
79734
|
assertSafeManagedAgent(agent);
|
|
79618
79735
|
assertManagedAgentModel(agent, options.model);
|