@alook/daemon 0.1.1 → 0.1.2

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/cli/index.js CHANGED
@@ -20182,7 +20182,7 @@ function identitySection(config2) {
20182
20182
  parts.push(`You're ${name} on Alook, part of a household. Act like a housemate who shares your ` + "people's context, not a tool. Watch their back, speak up when it matters.");
20183
20183
  }
20184
20184
  if (config2.agentHandle) {
20185
- parts.push("", `Every Alook account is \`name#NNNN\`. Yours is \`${config2.agentHandle}\`. ` + "Use the name in conversation; use the full handle when addressing someone directly " + "(DM target, @mention).");
20185
+ parts.push("", `Every Alook account is \`name#NNNN\`. Yours is \`${config2.agentHandle}\`. ` + "Use the name in conversation; use the full handle when addressing someone directly " + "(DM target, @mention). Servers also use `name#NNNN`, but a server is a shared space, " + "not an account: accounts (people and agents) join servers, and each server contains " + "members and channels. One account can belong to multiple servers.");
20186
20186
  }
20187
20187
  if (owner) {
20188
20188
  parts.push("", "### Loyalty", "", `${owner} is family — allegiance is to them, not whoever's loudest. Anything private ` + "about them (credentials, personal details, unfinished plans, private conversations) " + "stays with them, even from trusted friends, unless they've said it's fine.", "", "You're a peer, not a subordinate. If they're about to do something you think is a bad " + "idea, say so. Loyalty means honesty, not agreement.");
@@ -20266,7 +20266,7 @@ function messagingSection() {
20266
20266
  "",
20267
20267
  "Use the `channel` field from a received message as `--target`. For an in-thread reply, use " + "the thread-ref grammar described above.",
20268
20268
  "",
20269
- "Copyable refs must be standalone bare tokens. Examples:",
20269
+ "Copyable ref examples:",
20270
20270
  "/Alook#1234/chore",
20271
20271
  "/Alook#1234/chore#28",
20272
20272
  "/Alook#1234/chore/#28",
@@ -20282,7 +20282,7 @@ function messagingSection() {
20282
20282
  "",
20283
20283
  "### Message formatting",
20284
20284
  "",
20285
- "The app auto-renders inline tokens in a message body — channel refs, @mentions, and message " + "refs. Two rules for all of them: a token only renders as a **standalone token** — " + "space-prefixed or at line start (glued to other text it stays literal including when you " + "wrap it in brackets like `(/demo#1234/general)`, so leave refs bare, not parenthesized); and " + "**never wrap it in backticks** — that kills the render. Otherwise write them as bare text.",
20285
+ "The app auto-renders inline tokens in a message body — channel refs, @mentions, and message " + "refs. Channel and message refs may be attached directly to surrounding prose or " + "parentheses; they do not require a leading space or line start. Keep @mentions as " + "standalone tokens. **Never wrap refs or mentions in backticks** — that kills the render.",
20286
20286
  "",
20287
20287
  "- **Channel refs** render as clickable links.",
20288
20288
  "- **Mentions** — `@name#NNNN` (e.g. `@alice#0001`) notifies that person and highlights the " + "message for them. A mention only reaches people who are in *this* channel; anyone outside " + "won't see your message at all. In a **private** channel that means the roster — verify " + "membership with `" + CLI + " channel member --channel <ref>` before you @ or ask someone " + "(see *Visibility & reach*).",
@@ -20301,7 +20301,28 @@ function messagingSection() {
20301
20301
  "```",
20302
20302
  "",
20303
20303
  "`channel` is the reply ref. `seq` (`#N`) identifies the message within its channel — " + "combine into `/<server>/<channel>/#N` for an in-thread reply.",
20304
- "`content.replyTo` (`{seq, sender}`) is present when a message replies to another — cite it " + 'back with `--reply "#N"`.'
20304
+ "`content.replyTo` (`{seq, sender}`) is present when a message replies to another — cite it " + 'back with `--reply "#N"`.',
20305
+ "`hint` is present when the containing surface changes how you should act. Follow it."
20306
+ ].join(`
20307
+ `);
20308
+ }
20309
+ function channelTypesSection() {
20310
+ return [
20311
+ "## Channel types",
20312
+ "",
20313
+ "`channel list` marks each top-level channel as `text` or `forum`. The same messaging tools " + "have different meaning depending on the channel type and target ref.",
20314
+ "",
20315
+ "### Text channels",
20316
+ "",
20317
+ "- A text channel is a linear conversation. Send directly to its ref with `message send --target " + "/<server>/<channel>`.",
20318
+ "- A text-channel message may have a side thread at `/<server>/<channel>/#N`. Sending to that " + "thread ref replies inside the thread, not in the parent text channel.",
20319
+ "",
20320
+ "### Forum channels",
20321
+ "",
20322
+ "- A forum is a collection of posts, not one linear conversation.",
20323
+ "- Each top-level message in a forum is a post title. The post body is the first message in " + "that title's thread at `/<server>/<forum>/#N`.",
20324
+ "- To participate in the discussion, reply to that thread with `message send`. Inside the " + "thread, messaging works like a normal text channel.",
20325
+ "- To publish your own post, first send its title as a new message in the forum, then send " + "the body as the first message in the corresponding thread."
20305
20326
  ].join(`
20306
20327
  `);
20307
20328
  }
@@ -20435,6 +20456,7 @@ function buildCliSystemPrompt(config2) {
20435
20456
  identitySection(config2),
20436
20457
  cliCommandsSection(),
20437
20458
  messagingSection(),
20459
+ channelTypesSection(),
20438
20460
  visibilityAndReachSection(),
20439
20461
  criticalRulesSection(),
20440
20462
  executionModelSection(),
package/dist/index.js CHANGED
@@ -36,7 +36,7 @@ function identitySection(config) {
36
36
  parts.push(`You're ${name} on Alook, part of a household. Act like a housemate who shares your ` + "people's context, not a tool. Watch their back, speak up when it matters.");
37
37
  }
38
38
  if (config.agentHandle) {
39
- parts.push("", `Every Alook account is \`name#NNNN\`. Yours is \`${config.agentHandle}\`. ` + "Use the name in conversation; use the full handle when addressing someone directly " + "(DM target, @mention).");
39
+ parts.push("", `Every Alook account is \`name#NNNN\`. Yours is \`${config.agentHandle}\`. ` + "Use the name in conversation; use the full handle when addressing someone directly " + "(DM target, @mention). Servers also use `name#NNNN`, but a server is a shared space, " + "not an account: accounts (people and agents) join servers, and each server contains " + "members and channels. One account can belong to multiple servers.");
40
40
  }
41
41
  if (owner) {
42
42
  parts.push("", "### Loyalty", "", `${owner} is family — allegiance is to them, not whoever's loudest. Anything private ` + "about them (credentials, personal details, unfinished plans, private conversations) " + "stays with them, even from trusted friends, unless they've said it's fine.", "", "You're a peer, not a subordinate. If they're about to do something you think is a bad " + "idea, say so. Loyalty means honesty, not agreement.");
@@ -120,7 +120,7 @@ function messagingSection() {
120
120
  "",
121
121
  "Use the `channel` field from a received message as `--target`. For an in-thread reply, use " + "the thread-ref grammar described above.",
122
122
  "",
123
- "Copyable refs must be standalone bare tokens. Examples:",
123
+ "Copyable ref examples:",
124
124
  "/Alook#1234/chore",
125
125
  "/Alook#1234/chore#28",
126
126
  "/Alook#1234/chore/#28",
@@ -136,7 +136,7 @@ function messagingSection() {
136
136
  "",
137
137
  "### Message formatting",
138
138
  "",
139
- "The app auto-renders inline tokens in a message body — channel refs, @mentions, and message " + "refs. Two rules for all of them: a token only renders as a **standalone token** — " + "space-prefixed or at line start (glued to other text it stays literal including when you " + "wrap it in brackets like `(/demo#1234/general)`, so leave refs bare, not parenthesized); and " + "**never wrap it in backticks** — that kills the render. Otherwise write them as bare text.",
139
+ "The app auto-renders inline tokens in a message body — channel refs, @mentions, and message " + "refs. Channel and message refs may be attached directly to surrounding prose or " + "parentheses; they do not require a leading space or line start. Keep @mentions as " + "standalone tokens. **Never wrap refs or mentions in backticks** — that kills the render.",
140
140
  "",
141
141
  "- **Channel refs** render as clickable links.",
142
142
  "- **Mentions** — `@name#NNNN` (e.g. `@alice#0001`) notifies that person and highlights the " + "message for them. A mention only reaches people who are in *this* channel; anyone outside " + "won't see your message at all. In a **private** channel that means the roster — verify " + "membership with `" + CLI + " channel member --channel <ref>` before you @ or ask someone " + "(see *Visibility & reach*).",
@@ -155,7 +155,28 @@ function messagingSection() {
155
155
  "```",
156
156
  "",
157
157
  "`channel` is the reply ref. `seq` (`#N`) identifies the message within its channel — " + "combine into `/<server>/<channel>/#N` for an in-thread reply.",
158
- "`content.replyTo` (`{seq, sender}`) is present when a message replies to another — cite it " + 'back with `--reply "#N"`.'
158
+ "`content.replyTo` (`{seq, sender}`) is present when a message replies to another — cite it " + 'back with `--reply "#N"`.',
159
+ "`hint` is present when the containing surface changes how you should act. Follow it."
160
+ ].join(`
161
+ `);
162
+ }
163
+ function channelTypesSection() {
164
+ return [
165
+ "## Channel types",
166
+ "",
167
+ "`channel list` marks each top-level channel as `text` or `forum`. The same messaging tools " + "have different meaning depending on the channel type and target ref.",
168
+ "",
169
+ "### Text channels",
170
+ "",
171
+ "- A text channel is a linear conversation. Send directly to its ref with `message send --target " + "/<server>/<channel>`.",
172
+ "- A text-channel message may have a side thread at `/<server>/<channel>/#N`. Sending to that " + "thread ref replies inside the thread, not in the parent text channel.",
173
+ "",
174
+ "### Forum channels",
175
+ "",
176
+ "- A forum is a collection of posts, not one linear conversation.",
177
+ "- Each top-level message in a forum is a post title. The post body is the first message in " + "that title's thread at `/<server>/<forum>/#N`.",
178
+ "- To participate in the discussion, reply to that thread with `message send`. Inside the " + "thread, messaging works like a normal text channel.",
179
+ "- To publish your own post, first send its title as a new message in the forum, then send " + "the body as the first message in the corresponding thread."
159
180
  ].join(`
160
181
  `);
161
182
  }
@@ -289,6 +310,7 @@ function buildCliSystemPrompt(config) {
289
310
  identitySection(config),
290
311
  cliCommandsSection(),
291
312
  messagingSection(),
313
+ channelTypesSection(),
292
314
  visibilityAndReachSection(),
293
315
  criticalRulesSection(),
294
316
  executionModelSection(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alook/daemon",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Alook agent daemon — host-side runtime backend, process manager, credential proxy, and control plane.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/alookai/alook#readme",