@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.
Files changed (76) hide show
  1. package/README.md +232 -23
  2. package/dist/index.js +204 -69
  3. package/dist/index.js.map +1 -1
  4. package/dist/setup-api.js +3 -0
  5. package/dist/setup-api.js.map +1 -0
  6. package/dist/setup-entry.js +4 -0
  7. package/dist/setup-entry.js.map +1 -0
  8. package/dist/src/actions.js +30 -8
  9. package/dist/src/actions.js.map +1 -1
  10. package/dist/src/channel.js +155 -420
  11. package/dist/src/channel.js.map +1 -1
  12. package/dist/src/channel.runtime.js +142 -0
  13. package/dist/src/channel.runtime.js.map +1 -0
  14. package/dist/src/config-schema.js +37 -1
  15. package/dist/src/config-schema.js.map +1 -1
  16. package/dist/src/effective-owner.js +22 -0
  17. package/dist/src/effective-owner.js.map +1 -0
  18. package/dist/src/gateway-status.js +72 -0
  19. package/dist/src/gateway-status.js.map +1 -0
  20. package/dist/src/monitor/approval.js.map +1 -1
  21. package/dist/src/monitor/computing-presence.js +221 -0
  22. package/dist/src/monitor/computing-presence.js.map +1 -0
  23. package/dist/src/monitor/discovery.js +2 -2
  24. package/dist/src/monitor/index.js +665 -171
  25. package/dist/src/monitor/index.js.map +1 -1
  26. package/dist/src/monitor/media.js +165 -6
  27. package/dist/src/monitor/media.js.map +1 -1
  28. package/dist/src/monitor/nudge-runner.js +232 -0
  29. package/dist/src/monitor/nudge-runner.js.map +1 -0
  30. package/dist/src/monitor/nudge-state.js +58 -0
  31. package/dist/src/monitor/nudge-state.js.map +1 -0
  32. package/dist/src/monitor/owner-reply-persistence.js +92 -0
  33. package/dist/src/monitor/owner-reply-persistence.js.map +1 -0
  34. package/dist/src/monitor/pending-nudge-persistence.js +15 -0
  35. package/dist/src/monitor/pending-nudge-persistence.js.map +1 -0
  36. package/dist/src/monitor/settings-sync.js +28 -0
  37. package/dist/src/monitor/settings-sync.js.map +1 -0
  38. package/dist/src/monitor/utils.js +0 -4
  39. package/dist/src/monitor/utils.js.map +1 -1
  40. package/dist/src/nudge-decision.js +309 -0
  41. package/dist/src/nudge-decision.js.map +1 -0
  42. package/dist/src/nudge-messages.js +25 -0
  43. package/dist/src/nudge-messages.js.map +1 -0
  44. package/dist/src/nudge-scheduler.js +91 -0
  45. package/dist/src/nudge-scheduler.js.map +1 -0
  46. package/dist/src/pending-nudge.js +57 -0
  47. package/dist/src/pending-nudge.js.map +1 -0
  48. package/dist/src/settings.js +77 -5
  49. package/dist/src/settings.js.map +1 -1
  50. package/dist/src/setup-core.js +164 -0
  51. package/dist/src/setup-core.js.map +1 -0
  52. package/dist/src/setup-surface.js +85 -0
  53. package/dist/src/setup-surface.js.map +1 -0
  54. package/dist/src/telemetry.js +252 -0
  55. package/dist/src/telemetry.js.map +1 -0
  56. package/dist/src/tlon-binary.js +46 -0
  57. package/dist/src/tlon-binary.js.map +1 -0
  58. package/dist/src/tlon-tool-guard.js +44 -0
  59. package/dist/src/tlon-tool-guard.js.map +1 -0
  60. package/dist/src/tool-trace.js +100 -0
  61. package/dist/src/tool-trace.js.map +1 -0
  62. package/dist/src/types.js +31 -1
  63. package/dist/src/types.js.map +1 -1
  64. package/dist/src/urbit/api-client.js +4 -3
  65. package/dist/src/urbit/api-client.js.map +1 -1
  66. package/dist/src/urbit/base-url.js +2 -2
  67. package/dist/src/urbit/base-url.js.map +1 -1
  68. package/dist/src/urbit/fetch.js +1 -1
  69. package/dist/src/urbit/fetch.js.map +1 -1
  70. package/dist/src/urbit/upload.js +1 -1
  71. package/dist/src/urbit/upload.js.map +1 -1
  72. package/dist/src/version.generated.js +1 -1
  73. package/dist/src/version.generated.js.map +1 -1
  74. package/package.json +31 -24
  75. package/dist/src/onboarding.js +0 -178
  76. 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?.maxConsecutiveBotResponses ??
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
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
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":"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"}
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 { isBlockedHostname, isPrivateIpAddress } from "openclaw/plugin-sdk";
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 isBlockedHostname(normalized) || isPrivateIpAddress(normalized);
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,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAM5E,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,iBAAiB,CAAC,UAAU,CAAC,IAAI,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACzE,CAAC"}
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"}
@@ -1,4 +1,4 @@
1
- import { fetchWithSsrFGuard } from "openclaw/plugin-sdk";
1
+ import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/tlon";
2
2
  import { validateUrbitBaseUrl } from "./base-url.js";
3
3
  import { UrbitUrlError } from "./errors.js";
4
4
  export async function urbitFetch(params) {
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/urbit/fetch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,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"}
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"}
@@ -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,qBAAqB,CAAC;AACzD,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
+ {"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,3 +1,3 @@
1
1
  // Auto-generated by scripts/generate-version.js - do not edit
2
- export const PLUGIN_COMMIT = "6cf19e5";
2
+ export const PLUGIN_COMMIT = "eeac2256";
3
3
  //# sourceMappingURL=version.generated.js.map
@@ -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,SAAS,CAAC"}
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.2.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:security": "vitest run src/security.test.ts",
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:all": "vitest run"
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": "github:tloncorp/api-beta#c121deb",
43
- "@tloncorp/tlon-skill": "^0.2.2",
49
+ "@tloncorp/api": "presence",
50
+ "@tloncorp/tlon-skill": "^0.3.4",
44
51
  "@urbit/aura": "^3.0.0",
45
- "@urbit/http-api": "^3.0.0",
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.25",
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
  }
@@ -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