@tloncorp/openclaw 0.2.0 → 0.4.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/README.md +232 -23
- package/dist/index.js +204 -69
- package/dist/index.js.map +1 -1
- package/dist/setup-api.js +3 -0
- package/dist/setup-api.js.map +1 -0
- package/dist/setup-entry.js +4 -0
- package/dist/setup-entry.js.map +1 -0
- package/dist/src/actions.js +30 -8
- package/dist/src/actions.js.map +1 -1
- package/dist/src/channel.js +155 -420
- package/dist/src/channel.js.map +1 -1
- package/dist/src/channel.runtime.js +142 -0
- package/dist/src/channel.runtime.js.map +1 -0
- package/dist/src/config-schema.js +37 -1
- package/dist/src/config-schema.js.map +1 -1
- package/dist/src/effective-owner.js +22 -0
- package/dist/src/effective-owner.js.map +1 -0
- package/dist/src/gateway-status.js +72 -0
- package/dist/src/gateway-status.js.map +1 -0
- package/dist/src/monitor/approval.js.map +1 -1
- package/dist/src/monitor/computing-presence.js +221 -0
- package/dist/src/monitor/computing-presence.js.map +1 -0
- package/dist/src/monitor/discovery.js +2 -2
- package/dist/src/monitor/index.js +665 -171
- package/dist/src/monitor/index.js.map +1 -1
- package/dist/src/monitor/media.js +165 -6
- package/dist/src/monitor/media.js.map +1 -1
- package/dist/src/monitor/nudge-runner.js +232 -0
- package/dist/src/monitor/nudge-runner.js.map +1 -0
- package/dist/src/monitor/nudge-state.js +58 -0
- package/dist/src/monitor/nudge-state.js.map +1 -0
- package/dist/src/monitor/owner-reply-persistence.js +92 -0
- package/dist/src/monitor/owner-reply-persistence.js.map +1 -0
- package/dist/src/monitor/pending-nudge-persistence.js +15 -0
- package/dist/src/monitor/pending-nudge-persistence.js.map +1 -0
- package/dist/src/monitor/settings-sync.js +28 -0
- package/dist/src/monitor/settings-sync.js.map +1 -0
- package/dist/src/monitor/utils.js +0 -4
- package/dist/src/monitor/utils.js.map +1 -1
- package/dist/src/nudge-decision.js +309 -0
- package/dist/src/nudge-decision.js.map +1 -0
- package/dist/src/nudge-messages.js +25 -0
- package/dist/src/nudge-messages.js.map +1 -0
- package/dist/src/nudge-scheduler.js +91 -0
- package/dist/src/nudge-scheduler.js.map +1 -0
- package/dist/src/pending-nudge.js +57 -0
- package/dist/src/pending-nudge.js.map +1 -0
- package/dist/src/settings.js +77 -5
- package/dist/src/settings.js.map +1 -1
- package/dist/src/setup-core.js +164 -0
- package/dist/src/setup-core.js.map +1 -0
- package/dist/src/setup-surface.js +85 -0
- package/dist/src/setup-surface.js.map +1 -0
- package/dist/src/telemetry.js +252 -0
- package/dist/src/telemetry.js.map +1 -0
- package/dist/src/tlon-binary.js +46 -0
- package/dist/src/tlon-binary.js.map +1 -0
- package/dist/src/tlon-tool-guard.js +44 -0
- package/dist/src/tlon-tool-guard.js.map +1 -0
- package/dist/src/tool-trace.js +100 -0
- package/dist/src/tool-trace.js.map +1 -0
- package/dist/src/types.js +31 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/urbit/api-client.js +4 -3
- package/dist/src/urbit/api-client.js.map +1 -1
- package/dist/src/urbit/base-url.js +2 -2
- package/dist/src/urbit/base-url.js.map +1 -1
- package/dist/src/urbit/fetch.js +1 -1
- package/dist/src/urbit/fetch.js.map +1 -1
- package/dist/src/urbit/upload.js +1 -1
- package/dist/src/urbit/upload.js.map +1 -1
- package/dist/src/version.generated.js +1 -1
- package/dist/src/version.generated.js.map +1 -1
- package/package.json +31 -24
- package/dist/src/onboarding.js +0 -178
- package/dist/src/onboarding.js.map +0 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime guard for the tlon tool.
|
|
3
|
+
*
|
|
4
|
+
* Blocks confirmed wrong-path send operations that should use the built-in
|
|
5
|
+
* `message` tool instead. Allows legacy club (0v...) targets for backward
|
|
6
|
+
* compatibility — clubs are deprecated and slated for removal audit.
|
|
7
|
+
*/
|
|
8
|
+
/** DM sub-operations that are send actions (not management). */
|
|
9
|
+
const DM_SEND_ACTIONS = new Set(["send", "reply"]);
|
|
10
|
+
/**
|
|
11
|
+
* Check whether a parsed tlon command is a blocked send operation.
|
|
12
|
+
*
|
|
13
|
+
* Returns a redirect message string if the operation is blocked,
|
|
14
|
+
* or null if the operation is allowed.
|
|
15
|
+
*/
|
|
16
|
+
export function checkBlockedSendOperation(args) {
|
|
17
|
+
if (args.length < 2)
|
|
18
|
+
return null;
|
|
19
|
+
const subcommand = args[0]?.toLowerCase();
|
|
20
|
+
const action = args[1]?.toLowerCase();
|
|
21
|
+
if (subcommand !== "dms" || !DM_SEND_ACTIONS.has(action)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
// dms send/reply require a target as the next argument
|
|
25
|
+
const target = args[2];
|
|
26
|
+
if (!target)
|
|
27
|
+
return null;
|
|
28
|
+
// Allow legacy club targets (0v...) for backward compatibility
|
|
29
|
+
if (target.startsWith("0v")) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
// Non-club target — this is a wrong-path send that should use `message`
|
|
33
|
+
// For replies, preserve the messageId (args[3]) so the redirect includes replyTo
|
|
34
|
+
if (action === "reply") {
|
|
35
|
+
const messageId = args[3] ?? "<messageId>";
|
|
36
|
+
return (`Blocked: 'dms reply' with a ship target should use the \`message\` tool instead. ` +
|
|
37
|
+
`Use: message action=send, channel=tlon, target=${target}, replyTo=${messageId}, message=<text>. ` +
|
|
38
|
+
`The \`message\` tool handles threading, bot profile, rate limiting, and reply routing correctly.`);
|
|
39
|
+
}
|
|
40
|
+
return (`Blocked: 'dms send' with a ship target should use the \`message\` tool instead. ` +
|
|
41
|
+
`Use: message action=send, channel=tlon, target=${target}, message=<text>. ` +
|
|
42
|
+
`The \`message\` tool handles threading, bot profile, rate limiting, and reply routing correctly.`);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=tlon-tool-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tlon-tool-guard.js","sourceRoot":"","sources":["../../src/tlon-tool-guard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,gEAAgE;AAChE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAc;IACtD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IAEtC,IAAI,UAAU,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uDAAuD;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,+DAA+D;IAC/D,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wEAAwE;IACxE,iFAAiF;IACjF,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC;QAC3C,OAAO,CACL,mFAAmF;YACnF,kDAAkD,MAAM,aAAa,SAAS,oBAAoB;YAClG,kGAAkG,CACnG,CAAC;IACJ,CAAC;IAED,OAAO,CACL,kFAAkF;QAClF,kDAAkD,MAAM,oBAAoB;QAC5E,kGAAkG,CACnG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
const TOOL_TRACE_CONTENT_ENV_VARS = [
|
|
2
|
+
"TEST_LIVE_TOOL_TRACE_CONTENTS",
|
|
3
|
+
"CI_LIVE_TOOL_TRACE_CONTENTS",
|
|
4
|
+
];
|
|
5
|
+
const REDACTED = "[REDACTED]";
|
|
6
|
+
const MAX_DEPTH = 4;
|
|
7
|
+
const MAX_STRING_LENGTH = 300;
|
|
8
|
+
const MAX_ARRAY_ITEMS = 20;
|
|
9
|
+
const MAX_OBJECT_KEYS = 30;
|
|
10
|
+
const SENSITIVE_KEY_RE = /^(?:authorization|auth|password|secret|token|accesstoken|refreshtoken|apikey|api_key|cookie|set-cookie|code)$/i;
|
|
11
|
+
function isPlainObject(value) {
|
|
12
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
13
|
+
}
|
|
14
|
+
function truncateString(value) {
|
|
15
|
+
if (value.startsWith("data:")) {
|
|
16
|
+
const prefix = value.slice(0, 48);
|
|
17
|
+
return `${prefix}… [data-url ${value.length} chars]`;
|
|
18
|
+
}
|
|
19
|
+
if (value.length <= MAX_STRING_LENGTH) {
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
return `${value.slice(0, MAX_STRING_LENGTH)}… [${value.length} chars]`;
|
|
23
|
+
}
|
|
24
|
+
function sanitizeValue(value, depth = 0) {
|
|
25
|
+
if (value == null || typeof value === "number" || typeof value === "boolean") {
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
if (typeof value === "string") {
|
|
29
|
+
return truncateString(value);
|
|
30
|
+
}
|
|
31
|
+
if (typeof value === "bigint") {
|
|
32
|
+
return value.toString();
|
|
33
|
+
}
|
|
34
|
+
if (typeof value === "function") {
|
|
35
|
+
return `[Function ${value.name || "anonymous"}]`;
|
|
36
|
+
}
|
|
37
|
+
if (value instanceof Error) {
|
|
38
|
+
return {
|
|
39
|
+
name: value.name,
|
|
40
|
+
message: truncateString(value.message),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (depth >= MAX_DEPTH) {
|
|
44
|
+
if (Array.isArray(value)) {
|
|
45
|
+
return `[Array(${value.length})]`;
|
|
46
|
+
}
|
|
47
|
+
if (isPlainObject(value)) {
|
|
48
|
+
return `[Object keys=${Object.keys(value).length}]`;
|
|
49
|
+
}
|
|
50
|
+
return String(value);
|
|
51
|
+
}
|
|
52
|
+
if (Array.isArray(value)) {
|
|
53
|
+
const items = value.slice(0, MAX_ARRAY_ITEMS).map((item) => sanitizeValue(item, depth + 1));
|
|
54
|
+
if (value.length > MAX_ARRAY_ITEMS) {
|
|
55
|
+
items.push(`[+${value.length - MAX_ARRAY_ITEMS} more items]`);
|
|
56
|
+
}
|
|
57
|
+
return items;
|
|
58
|
+
}
|
|
59
|
+
if (isPlainObject(value)) {
|
|
60
|
+
const output = {};
|
|
61
|
+
const entries = Object.entries(value);
|
|
62
|
+
for (const [index, [key, nested]] of entries.entries()) {
|
|
63
|
+
if (index >= MAX_OBJECT_KEYS) {
|
|
64
|
+
output.__truncated__ = `[+${entries.length - MAX_OBJECT_KEYS} more keys]`;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
output[key] = SENSITIVE_KEY_RE.test(key)
|
|
68
|
+
? REDACTED
|
|
69
|
+
: sanitizeValue(nested, depth + 1);
|
|
70
|
+
}
|
|
71
|
+
return output;
|
|
72
|
+
}
|
|
73
|
+
return String(value);
|
|
74
|
+
}
|
|
75
|
+
export function liveToolTraceContentsEnabled(env = process.env) {
|
|
76
|
+
return TOOL_TRACE_CONTENT_ENV_VARS.some((name) => /^(1|true|yes|on)$/i.test(env[name] ?? ""));
|
|
77
|
+
}
|
|
78
|
+
export function formatToolTraceEvent(params) {
|
|
79
|
+
const body = {
|
|
80
|
+
phase: params.phase,
|
|
81
|
+
sessionKey: params.sessionKey?.trim() || undefined,
|
|
82
|
+
toolName: params.toolName,
|
|
83
|
+
payload: sanitizeValue(params.payload),
|
|
84
|
+
};
|
|
85
|
+
return `tooltrace ${params.phase}: ${JSON.stringify(body)}`;
|
|
86
|
+
}
|
|
87
|
+
export function shouldLogAfterToolTrace(event) {
|
|
88
|
+
if (typeof event.durationMs === "number") {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
if (event.error) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
return event.result == null;
|
|
95
|
+
}
|
|
96
|
+
export const _testing = {
|
|
97
|
+
sanitizeValue,
|
|
98
|
+
truncateString,
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=tool-trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-trace.js","sourceRoot":"","sources":["../../src/tool-trace.ts"],"names":[],"mappings":"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"}
|
package/dist/src/types.js
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
function resolveTelemetryConfig(base, account) {
|
|
2
|
+
return {
|
|
3
|
+
enabled: account?.enabled ?? base?.enabled ?? false,
|
|
4
|
+
apiKey: account?.apiKey ?? base?.apiKey ?? null,
|
|
5
|
+
host: account?.host ?? base?.host ?? null,
|
|
6
|
+
};
|
|
7
|
+
}
|
|
1
8
|
export function resolveTlonAccount(cfg, accountId) {
|
|
2
9
|
const base = cfg.channels?.tlon;
|
|
3
10
|
if (!base) {
|
|
@@ -21,6 +28,11 @@ export function resolveTlonAccount(cfg, accountId) {
|
|
|
21
28
|
ownerShip: null,
|
|
22
29
|
reactionLevel: null,
|
|
23
30
|
maxConsecutiveBotResponses: null,
|
|
31
|
+
telemetry: {
|
|
32
|
+
enabled: false,
|
|
33
|
+
apiKey: null,
|
|
34
|
+
host: null,
|
|
35
|
+
},
|
|
24
36
|
};
|
|
25
37
|
}
|
|
26
38
|
const useDefault = !accountId || accountId === "default";
|
|
@@ -44,9 +56,11 @@ export function resolveTlonAccount(cfg, accountId) {
|
|
|
44
56
|
null);
|
|
45
57
|
const ownerShip = (account?.ownerShip ?? base.ownerShip ?? null);
|
|
46
58
|
const reactionLevel = (account?.reactionLevel ?? base.reactionLevel ?? null);
|
|
47
|
-
const maxConsecutiveBotResponses = (account
|
|
59
|
+
const maxConsecutiveBotResponses = (account
|
|
60
|
+
?.maxConsecutiveBotResponses ??
|
|
48
61
|
base.maxConsecutiveBotResponses ??
|
|
49
62
|
null);
|
|
63
|
+
const telemetry = resolveTelemetryConfig(base.telemetry, account?.telemetry);
|
|
50
64
|
const defaultAuthorizedShips = (account?.defaultAuthorizedShips ??
|
|
51
65
|
base?.defaultAuthorizedShips ??
|
|
52
66
|
[]);
|
|
@@ -71,6 +85,7 @@ export function resolveTlonAccount(cfg, accountId) {
|
|
|
71
85
|
ownerShip,
|
|
72
86
|
reactionLevel,
|
|
73
87
|
maxConsecutiveBotResponses,
|
|
88
|
+
telemetry,
|
|
74
89
|
};
|
|
75
90
|
}
|
|
76
91
|
export function listTlonAccountIds(cfg) {
|
|
@@ -81,4 +96,19 @@ export function listTlonAccountIds(cfg) {
|
|
|
81
96
|
const accounts = base.accounts ?? {};
|
|
82
97
|
return [...(base.ship ? ["default"] : []), ...Object.keys(accounts)];
|
|
83
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Like `listTlonAccountIds`, but only includes accounts that are both
|
|
101
|
+
* `enabled !== false` and fully `configured` (ship + url + code present).
|
|
102
|
+
*
|
|
103
|
+
* Use this when the question is "how many accounts will actually run a
|
|
104
|
+
* monitor in this process". Disabled or stub accounts cannot race
|
|
105
|
+
* shared-process state and should not, for example, disable the nudge
|
|
106
|
+
* scheduler's single-runnable-account guard.
|
|
107
|
+
*/
|
|
108
|
+
export function listRunnableTlonAccountIds(cfg) {
|
|
109
|
+
return listTlonAccountIds(cfg).filter((id) => {
|
|
110
|
+
const account = resolveTlonAccount(cfg, id);
|
|
111
|
+
return account.enabled && account.configured;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
84
114
|
//# sourceMappingURL=types.js.map
|
package/dist/src/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import { urbitFetch } from "./fetch.js";
|
|
|
8
8
|
* The @tloncorp/api configureClient accepts a `client` that looks like an Urbit instance.
|
|
9
9
|
* Includes stubs for connect/eventSource/scryWithInfo so configureClient never crashes.
|
|
10
10
|
*/
|
|
11
|
-
function createClientShim(pokeFn, scryFn) {
|
|
11
|
+
function createClientShim(pokeFn, shipUrl, scryFn) {
|
|
12
12
|
return {
|
|
13
13
|
poke: (params) => pokeFn(params),
|
|
14
14
|
on: () => ({ on: () => ({}) }),
|
|
@@ -30,6 +30,7 @@ function createClientShim(pokeFn, scryFn) {
|
|
|
30
30
|
// Properties configureClient may access
|
|
31
31
|
verbose: false,
|
|
32
32
|
nodeId: "",
|
|
33
|
+
url: shipUrl,
|
|
33
34
|
};
|
|
34
35
|
}
|
|
35
36
|
/**
|
|
@@ -37,7 +38,7 @@ function createClientShim(pokeFn, scryFn) {
|
|
|
37
38
|
* Use this when you already have an authenticated poke backend (e.g., SSE client in monitor).
|
|
38
39
|
*/
|
|
39
40
|
export function configureTlonApiWithPoke(pokeFn, ship, shipUrl, scryFn) {
|
|
40
|
-
const shim = createClientShim(pokeFn, scryFn);
|
|
41
|
+
const shim = createClientShim(pokeFn, shipUrl, scryFn);
|
|
41
42
|
configureClient({
|
|
42
43
|
shipName: ship.replace(/^~/, ""),
|
|
43
44
|
shipUrl,
|
|
@@ -82,7 +83,7 @@ export async function withAuthenticatedTlonApi(params, fn) {
|
|
|
82
83
|
await release();
|
|
83
84
|
}
|
|
84
85
|
};
|
|
85
|
-
const shim = createClientShim(api.poke, scryFn);
|
|
86
|
+
const shim = createClientShim(api.poke, params.url, scryFn);
|
|
86
87
|
configureClient({
|
|
87
88
|
shipName: params.ship.replace(/^~/, ""),
|
|
88
89
|
shipUrl: params.url,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/urbit/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,iCAAiC,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKxC;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,MAAc,EAAE,MAAe;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/urbit/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isBlockedHostnameOrIp } from "openclaw/plugin-sdk/tlon";
|
|
2
2
|
function hasScheme(value) {
|
|
3
3
|
return /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(value);
|
|
4
4
|
}
|
|
@@ -40,6 +40,6 @@ export function isBlockedUrbitHostname(hostname) {
|
|
|
40
40
|
if (!normalized) {
|
|
41
41
|
return false;
|
|
42
42
|
}
|
|
43
|
-
return
|
|
43
|
+
return isBlockedHostnameOrIp(normalized);
|
|
44
44
|
}
|
|
45
45
|
//# sourceMappingURL=base-url.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-url.js","sourceRoot":"","sources":["../../../src/urbit/base-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"base-url.js","sourceRoot":"","sources":["../../../src/urbit/base-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAMjE,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,EAAE,CAAC;IAEtE,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAClD,CAAC;IAED,wFAAwF;IACxF,+DAA+D;IAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;QACtB,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;QACzD,CAAC,CAAC,MAAM;YACN,CAAC,CAAC,IAAI,QAAQ,GAAG;YACjB,CAAC,CAAC,QAAQ,CAAC;IAEf,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,qBAAqB,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC"}
|
package/dist/src/urbit/fetch.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/urbit/fetch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/urbit/fetch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAsB5C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAyB;IACxD,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/D,OAAO,MAAM,kBAAkB,CAAC;QAC9B,GAAG;QACH,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,UAAU;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC"}
|
package/dist/src/urbit/upload.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Upload an image from a URL to Tlon storage.
|
|
3
3
|
*/
|
|
4
4
|
import { uploadFile } from "@tloncorp/api";
|
|
5
|
-
import { fetchWithSsrFGuard } from "openclaw/plugin-sdk";
|
|
5
|
+
import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/tlon";
|
|
6
6
|
import { getDefaultSsrFPolicy } from "./context.js";
|
|
7
7
|
/**
|
|
8
8
|
* Fetch an image from a URL and upload it to Tlon storage.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/urbit/upload.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/urbit/upload.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IACvD,IAAI,CAAC;QACH,6CAA6C;QAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;YAC7D,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,uCAAuC;QACvC,iFAAiF;QACjF,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,kBAAkB,CAAC;YACrD,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;YACvB,MAAM,EAAE,oBAAoB,EAAE;YAC9B,YAAY,EAAE,mBAAmB;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,qCAAqC,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAClF,OAAO,QAAQ,CAAC;YAClB,CAAC;YAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC;YACxE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,6CAA6C;YAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;YAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,UAAU,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;YAExE,yBAAyB;YACzB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;gBAC9B,IAAI;gBACJ,QAAQ;gBACR,WAAW;aACZ,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,GAAG,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,sDAAsD,GAAG,EAAE,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.generated.js","sourceRoot":"","sources":["../../src/version.generated.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,CAAC,MAAM,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"version.generated.js","sourceRoot":"","sources":["../../src/version.generated.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tloncorp/openclaw",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "OpenClaw Tlon/Urbit channel plugin",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/tloncorp/openclaw-tlon.git"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/",
|
|
12
|
+
"openclaw.plugin.json",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
5
15
|
"type": "module",
|
|
6
16
|
"main": "dist/index.js",
|
|
7
17
|
"types": "dist/index.d.ts",
|
|
@@ -15,43 +25,37 @@
|
|
|
15
25
|
"import": "./dist/index.js"
|
|
16
26
|
}
|
|
17
27
|
},
|
|
18
|
-
"files": [
|
|
19
|
-
"dist/",
|
|
20
|
-
"openclaw.plugin.json",
|
|
21
|
-
"README.md"
|
|
22
|
-
],
|
|
23
28
|
"scripts": {
|
|
24
|
-
"prebuild": "node scripts/generate-version.js",
|
|
25
29
|
"build": "tsc",
|
|
26
30
|
"clean": "rm -rf dist",
|
|
27
|
-
|
|
28
31
|
"dev": "./dev/run.sh",
|
|
32
|
+
"dev:api:link": "./dev/link-local-api.sh",
|
|
33
|
+
"dev:api:unlink": "./dev/unlink-local-api.sh",
|
|
29
34
|
"format": "oxfmt --check",
|
|
30
35
|
"format:fix": "oxfmt --write",
|
|
31
36
|
"lint": "oxlint --type-aware",
|
|
32
37
|
"lint:fix": "pnpm format:fix && oxlint --type-aware --fix",
|
|
38
|
+
"prebuild": "node scripts/generate-version.js",
|
|
33
39
|
"test": "vitest run src/",
|
|
34
|
-
"test:
|
|
35
|
-
"test:watch": "vitest src/",
|
|
40
|
+
"test:all": "vitest run",
|
|
36
41
|
"test:integration": "bash ./test/run.sh",
|
|
37
42
|
"test:integration:dev": "./test/run-dev.sh",
|
|
38
43
|
"test:integration:watch": "./test/run-dev.sh --watch",
|
|
39
|
-
"test:
|
|
44
|
+
"test:manual": "bash ./test/run-manual.sh",
|
|
45
|
+
"test:security": "vitest run src/security.test.ts",
|
|
46
|
+
"test:watch": "vitest src/"
|
|
40
47
|
},
|
|
41
48
|
"dependencies": {
|
|
42
|
-
"@tloncorp/api": "
|
|
43
|
-
"@tloncorp/tlon-skill": "^0.
|
|
49
|
+
"@tloncorp/api": "presence",
|
|
50
|
+
"@tloncorp/tlon-skill": "^0.3.4",
|
|
44
51
|
"@urbit/aura": "^3.0.0",
|
|
45
|
-
"
|
|
52
|
+
"posthog-node": "^5.28.9",
|
|
46
53
|
"zod": "^4.3.6"
|
|
47
54
|
},
|
|
48
|
-
"peerDependencies": {
|
|
49
|
-
"openclaw": ">=2026.2.0"
|
|
50
|
-
},
|
|
51
55
|
"devDependencies": {
|
|
52
56
|
"@types/node": "^25.4.0",
|
|
53
57
|
"dotenv": "^17.2.4",
|
|
54
|
-
"openclaw": "2026.2
|
|
58
|
+
"openclaw": "2026.4.2",
|
|
55
59
|
"oxfmt": "0.27.0",
|
|
56
60
|
"oxlint": "^1.42.0",
|
|
57
61
|
"oxlint-tsgolint": "^0.16.0",
|
|
@@ -59,7 +63,14 @@
|
|
|
59
63
|
"vitest": "^4.0.0",
|
|
60
64
|
"zod": "^4.3.6"
|
|
61
65
|
},
|
|
66
|
+
"peerDependencies": {
|
|
67
|
+
"openclaw": ">=2026.3.22"
|
|
68
|
+
},
|
|
62
69
|
"openclaw": {
|
|
70
|
+
"extensions": [
|
|
71
|
+
"./dist/index.js"
|
|
72
|
+
],
|
|
73
|
+
"setupEntry": "./dist/setup-entry.js",
|
|
63
74
|
"channel": {
|
|
64
75
|
"id": "tlon",
|
|
65
76
|
"label": "Tlon",
|
|
@@ -71,14 +82,10 @@
|
|
|
71
82
|
"quickstartAllowFrom": true
|
|
72
83
|
},
|
|
73
84
|
"install": {
|
|
85
|
+
"minHostVersion": ">=2026.3.22",
|
|
74
86
|
"npmSpec": "@tloncorp/openclaw",
|
|
75
87
|
"localPath": "extensions/tlon",
|
|
76
88
|
"defaultChoice": "npm"
|
|
77
89
|
}
|
|
78
|
-
}
|
|
79
|
-
"repository": {
|
|
80
|
-
"type": "git",
|
|
81
|
-
"url": "https://github.com/tloncorp/openclaw-tlon.git"
|
|
82
|
-
},
|
|
83
|
-
"license": "MIT"
|
|
90
|
+
}
|
|
84
91
|
}
|
package/dist/src/onboarding.js
DELETED
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { formatDocsLink, promptAccountId, DEFAULT_ACCOUNT_ID, normalizeAccountId, } from "openclaw/plugin-sdk";
|
|
2
|
-
import { buildTlonAccountFields } from "./account-fields.js";
|
|
3
|
-
import { listTlonAccountIds, resolveTlonAccount } from "./types.js";
|
|
4
|
-
import { isBlockedUrbitHostname, validateUrbitBaseUrl } from "./urbit/base-url.js";
|
|
5
|
-
const channel = "tlon";
|
|
6
|
-
function isConfigured(account) {
|
|
7
|
-
return Boolean(account.ship && account.url && account.code);
|
|
8
|
-
}
|
|
9
|
-
function applyAccountConfig(params) {
|
|
10
|
-
const { cfg, accountId, input } = params;
|
|
11
|
-
const useDefault = accountId === DEFAULT_ACCOUNT_ID;
|
|
12
|
-
const base = cfg.channels?.tlon ?? {};
|
|
13
|
-
const nextValues = {
|
|
14
|
-
enabled: true,
|
|
15
|
-
...(input.name ? { name: input.name } : {}),
|
|
16
|
-
...buildTlonAccountFields(input),
|
|
17
|
-
};
|
|
18
|
-
if (useDefault) {
|
|
19
|
-
return {
|
|
20
|
-
...cfg,
|
|
21
|
-
channels: {
|
|
22
|
-
...cfg.channels,
|
|
23
|
-
tlon: {
|
|
24
|
-
...base,
|
|
25
|
-
...nextValues,
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
...cfg,
|
|
32
|
-
channels: {
|
|
33
|
-
...cfg.channels,
|
|
34
|
-
tlon: {
|
|
35
|
-
...base,
|
|
36
|
-
enabled: base.enabled ?? true,
|
|
37
|
-
accounts: {
|
|
38
|
-
...base.accounts,
|
|
39
|
-
[accountId]: {
|
|
40
|
-
...base.accounts?.[accountId],
|
|
41
|
-
...nextValues,
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
async function noteTlonHelp(prompter) {
|
|
49
|
-
await prompter.note([
|
|
50
|
-
"You need your Urbit ship URL and login code.",
|
|
51
|
-
"Example URL: https://your-ship-host",
|
|
52
|
-
"Example ship: ~sampel-palnet",
|
|
53
|
-
"If your ship URL is on a private network (LAN/localhost), you must explicitly allow it during setup.",
|
|
54
|
-
`Docs: ${formatDocsLink("/channels/tlon", "channels/tlon")}`,
|
|
55
|
-
].join("\n"), "Tlon setup");
|
|
56
|
-
}
|
|
57
|
-
function parseList(value) {
|
|
58
|
-
return value
|
|
59
|
-
.split(/[\n,;]+/g)
|
|
60
|
-
.map((entry) => entry.trim())
|
|
61
|
-
.filter(Boolean);
|
|
62
|
-
}
|
|
63
|
-
export const tlonOnboardingAdapter = {
|
|
64
|
-
channel,
|
|
65
|
-
getStatus: async ({ cfg }) => {
|
|
66
|
-
const accountIds = listTlonAccountIds(cfg);
|
|
67
|
-
const configured = accountIds.length > 0
|
|
68
|
-
? accountIds.some((accountId) => isConfigured(resolveTlonAccount(cfg, accountId)))
|
|
69
|
-
: isConfigured(resolveTlonAccount(cfg, DEFAULT_ACCOUNT_ID));
|
|
70
|
-
return {
|
|
71
|
-
channel,
|
|
72
|
-
configured,
|
|
73
|
-
statusLines: [`Tlon: ${configured ? "configured" : "needs setup"}`],
|
|
74
|
-
selectionHint: configured ? "configured" : "urbit messenger",
|
|
75
|
-
quickstartScore: configured ? 1 : 4,
|
|
76
|
-
};
|
|
77
|
-
},
|
|
78
|
-
configure: async ({ cfg, prompter, accountOverrides, shouldPromptAccountIds }) => {
|
|
79
|
-
const override = accountOverrides[channel]?.trim();
|
|
80
|
-
const defaultAccountId = DEFAULT_ACCOUNT_ID;
|
|
81
|
-
let accountId = override ? normalizeAccountId(override) : defaultAccountId;
|
|
82
|
-
if (shouldPromptAccountIds && !override) {
|
|
83
|
-
accountId = await promptAccountId({
|
|
84
|
-
cfg,
|
|
85
|
-
prompter,
|
|
86
|
-
label: "Tlon",
|
|
87
|
-
currentId: accountId,
|
|
88
|
-
listAccountIds: listTlonAccountIds,
|
|
89
|
-
defaultAccountId,
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
const resolved = resolveTlonAccount(cfg, accountId);
|
|
93
|
-
await noteTlonHelp(prompter);
|
|
94
|
-
const ship = await prompter.text({
|
|
95
|
-
message: "Ship name",
|
|
96
|
-
placeholder: "~sampel-palnet",
|
|
97
|
-
initialValue: resolved.ship ?? undefined,
|
|
98
|
-
validate: (value) => (String(value ?? "").trim() ? undefined : "Required"),
|
|
99
|
-
});
|
|
100
|
-
const url = await prompter.text({
|
|
101
|
-
message: "Ship URL",
|
|
102
|
-
placeholder: "https://your-ship-host",
|
|
103
|
-
initialValue: resolved.url ?? undefined,
|
|
104
|
-
validate: (value) => {
|
|
105
|
-
const next = validateUrbitBaseUrl(String(value ?? ""));
|
|
106
|
-
if (!next.ok) {
|
|
107
|
-
return next.error;
|
|
108
|
-
}
|
|
109
|
-
return undefined;
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
const validatedUrl = validateUrbitBaseUrl(String(url).trim());
|
|
113
|
-
if (!validatedUrl.ok) {
|
|
114
|
-
throw new Error(`Invalid URL: ${validatedUrl.error}`);
|
|
115
|
-
}
|
|
116
|
-
let allowPrivateNetwork = resolved.allowPrivateNetwork ?? false;
|
|
117
|
-
if (isBlockedUrbitHostname(validatedUrl.hostname)) {
|
|
118
|
-
allowPrivateNetwork = await prompter.confirm({
|
|
119
|
-
message: "Ship URL looks like a private/internal host. Allow private network access? (SSRF risk)",
|
|
120
|
-
initialValue: allowPrivateNetwork,
|
|
121
|
-
});
|
|
122
|
-
if (!allowPrivateNetwork) {
|
|
123
|
-
throw new Error("Refusing private/internal Ship URL without explicit approval");
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
const code = await prompter.text({
|
|
127
|
-
message: "Login code",
|
|
128
|
-
placeholder: "lidlut-tabwed-pillex-ridrup",
|
|
129
|
-
initialValue: resolved.code ?? undefined,
|
|
130
|
-
validate: (value) => (String(value ?? "").trim() ? undefined : "Required"),
|
|
131
|
-
});
|
|
132
|
-
const wantsGroupChannels = await prompter.confirm({
|
|
133
|
-
message: "Add group channels manually? (optional)",
|
|
134
|
-
initialValue: false,
|
|
135
|
-
});
|
|
136
|
-
let groupChannels;
|
|
137
|
-
if (wantsGroupChannels) {
|
|
138
|
-
const entry = await prompter.text({
|
|
139
|
-
message: "Group channels (comma-separated)",
|
|
140
|
-
placeholder: "chat/~host-ship/general, chat/~host-ship/support",
|
|
141
|
-
});
|
|
142
|
-
const parsed = parseList(String(entry ?? ""));
|
|
143
|
-
groupChannels = parsed.length > 0 ? parsed : undefined;
|
|
144
|
-
}
|
|
145
|
-
const wantsAllowlist = await prompter.confirm({
|
|
146
|
-
message: "Restrict DMs with an allowlist?",
|
|
147
|
-
initialValue: false,
|
|
148
|
-
});
|
|
149
|
-
let dmAllowlist;
|
|
150
|
-
if (wantsAllowlist) {
|
|
151
|
-
const entry = await prompter.text({
|
|
152
|
-
message: "DM allowlist (comma-separated ship names)",
|
|
153
|
-
placeholder: "~zod, ~nec",
|
|
154
|
-
});
|
|
155
|
-
const parsed = parseList(String(entry ?? ""));
|
|
156
|
-
dmAllowlist = parsed.length > 0 ? parsed : undefined;
|
|
157
|
-
}
|
|
158
|
-
const autoDiscoverChannels = await prompter.confirm({
|
|
159
|
-
message: "Enable auto-discovery of group channels?",
|
|
160
|
-
initialValue: resolved.autoDiscoverChannels ?? true,
|
|
161
|
-
});
|
|
162
|
-
const next = applyAccountConfig({
|
|
163
|
-
cfg,
|
|
164
|
-
accountId,
|
|
165
|
-
input: {
|
|
166
|
-
ship: String(ship).trim(),
|
|
167
|
-
url: String(url).trim(),
|
|
168
|
-
code: String(code).trim(),
|
|
169
|
-
allowPrivateNetwork,
|
|
170
|
-
groupChannels,
|
|
171
|
-
dmAllowlist,
|
|
172
|
-
autoDiscoverChannels,
|
|
173
|
-
},
|
|
174
|
-
});
|
|
175
|
-
return { cfg: next, accountId };
|
|
176
|
-
},
|
|
177
|
-
};
|
|
178
|
-
//# sourceMappingURL=onboarding.js.map
|