@mosse-ai/cli 0.1.2 → 0.1.3

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 CHANGED
@@ -21397,7 +21397,7 @@ var BoardUpdateTask = defineCapability({
21397
21397
  id: "board.update_task",
21398
21398
  summary: "Update task fields.",
21399
21399
  usageRules: [
21400
- "expectedUpdatedAt guards status/assignee/reviewer/dueDate/todos; always pass it. Others: last-write-wins, reread first. todos/acceptanceChecks REPLACE the whole list (max 50 each): read full/fields; retain items with IDs, new items without IDs; omissions delete. Tick via {{board.check_todo}}. Unchecked todos block review/done. Project completion/review rules apply. Done: {{board.reopen_task}} first.",
21400
+ "expectedUpdatedAt guards status/assignee/reviewer/due fields; always pass it. Others: last-write-wins, reread first. todos/acceptanceChecks REPLACE the whole list (max 50 each): read full/fields; retain items with IDs, new items without IDs; omissions delete. Tick via {{board.check_todo}}. Unchecked todos block review/done. Project completion/review rules apply. Done: {{board.reopen_task}} first. Scheduling: dueTime needs dueDate; durationMin needs dueTime; clearing dueDate clears both.",
21401
21401
  { text: "A project admin other than the assignee can override designated review.", principal: "human" },
21402
21402
  { text: "Cannot mark your assigned task done; a person confirms.", principal: "agent" }
21403
21403
  ],
@@ -21411,6 +21411,18 @@ var BoardUpdateTask = defineCapability({
21411
21411
  assignee: memberRef.nullable().optional(),
21412
21412
  reviewer: memberRef.nullable().optional(),
21413
21413
  dueDate: external_exports.string().nullable().optional(),
21414
+ /** 钟点 "HH:MM"(本地墙上时间;要求 dueDate 非空)。 */
21415
+ dueTime: external_exports.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/).nullable().optional(),
21416
+ /** 预计时长(分钟,1–10080;要求 dueTime 非空)。 */
21417
+ durationMin: external_exports.number().int().min(1).max(10080).nullable().optional(),
21418
+ /** 重复预设:完成时生成下一次(同一套 task,不另建实体)。 */
21419
+ recurrence: external_exports.enum(["daily", "weekly", "monthly"]).nullable().optional(),
21420
+ /** 重复结束日期(YYYY-MM-DD,含当天)。 */
21421
+ recurrenceUntil: external_exports.string().date().nullable().optional(),
21422
+ /** 到点提醒提前量(分钟;0 = 准点,5/10/15/30/60/120)。 */
21423
+ reminderLeadMin: external_exports.union([external_exports.literal(0), external_exports.literal(5), external_exports.literal(10), external_exports.literal(15), external_exports.literal(30), external_exports.literal(60), external_exports.literal(120)]).optional(),
21424
+ /** 跳过一次重复:当前任务置 canceled 并生成下一次(不能与 status 同时给)。 */
21425
+ skipOccurrence: external_exports.boolean().optional(),
21414
21426
  todos: todoItems.optional(),
21415
21427
  acceptanceChecks: acceptanceCheckItems.optional(),
21416
21428
  /** 管理员绕过(完成规则 v2 §3:档 3 只绕过「只有审阅人能通过」;项目管理员、本人不是负责人;原因选填)。Agent 一律拒(策略表)。 */
@@ -21476,7 +21488,7 @@ var BoardCreateTask = defineCapability({
21476
21488
  id: "board.create_task",
21477
21489
  summary: "Create one backlog/todo task.",
21478
21490
  usageRules: [
21479
- "Reuse clientId. parentTaskId: same-project parent ID, one level. Add todos/checks afterward via {{board.update_task}}; labels/links/dependencies use their actions.",
21491
+ "Reuse clientId. parentTaskId: same-project, one level. Scheduling: dueTime needs dueDate; durationMin needs dueTime; recurrence (daily/weekly/monthly) spawns next on completion; recurrenceUntil caps. Todos/checks/labels/links/deps via their actions.",
21480
21492
  {
21481
21493
  text: "Prefer {{board.create_tasks}} for discussed work; partner confirms.",
21482
21494
  principal: "agent"
@@ -21491,6 +21503,18 @@ var BoardCreateTask = defineCapability({
21491
21503
  reviewer: memberRef.nullable().optional(),
21492
21504
  priority: external_exports.enum(TASK_PRIORITIES).optional(),
21493
21505
  dueDate: external_exports.string().nullable().optional(),
21506
+ /** 钟点 "HH:MM"(本地墙上时间;要求 dueDate 非空)。 */
21507
+ dueTime: external_exports.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/).nullable().optional(),
21508
+ /** 预计时长(分钟,1–10080;要求 dueTime 非空)。 */
21509
+ durationMin: external_exports.number().int().min(1).max(10080).nullable().optional(),
21510
+ /** 重复预设(MD-512 P3):daily / weekly / monthly;完成时生成下一次。 */
21511
+ recurrence: external_exports.enum(["daily", "weekly", "monthly"]).nullable().optional(),
21512
+ /** 重复结束日期(YYYY-MM-DD,含当天)。 */
21513
+ recurrenceUntil: external_exports.string().date().nullable().optional(),
21514
+ /** 到点提醒提前量(分钟;0 = 准点)。 */
21515
+ reminderLeadMin: external_exports.union([external_exports.literal(0), external_exports.literal(5), external_exports.literal(10), external_exports.literal(15), external_exports.literal(30), external_exports.literal(60), external_exports.literal(120)]).optional(),
21516
+ /** 跳过一次重复(当前任务置 canceled 并生成下一次;不能与 status 同时给)。 */
21517
+ skipOccurrence: external_exports.boolean().optional(),
21494
21518
  parentTaskId: uuid8.nullable().optional(),
21495
21519
  clientId: external_exports.string().max(200).nullable().optional(),
21496
21520
  /** 来源消息(任务回链到它,进展回到它的 thread)。系统内 Agent 不给,由会话派生(与 create_tasks 同一规则)。 */
@@ -21536,6 +21560,21 @@ var BoardCreateTasks = defineCapability({
21536
21560
  title: external_exports.string(),
21537
21561
  description: external_exports.string().optional(),
21538
21562
  priority: external_exports.enum(TASK_PRIORITIES).optional(),
21563
+ /** 每张任务各自的时间(与 create_task 同一套字段/约束)。 */
21564
+ dueDate: external_exports.string().nullable().optional(),
21565
+ dueTime: external_exports.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/).nullable().optional(),
21566
+ durationMin: external_exports.number().int().min(1).max(10080).nullable().optional(),
21567
+ recurrence: external_exports.enum(["daily", "weekly", "monthly"]).nullable().optional(),
21568
+ recurrenceUntil: external_exports.string().date().nullable().optional(),
21569
+ reminderLeadMin: external_exports.union([
21570
+ external_exports.literal(0),
21571
+ external_exports.literal(5),
21572
+ external_exports.literal(10),
21573
+ external_exports.literal(15),
21574
+ external_exports.literal(30),
21575
+ external_exports.literal(60),
21576
+ external_exports.literal(120)
21577
+ ]).optional(),
21539
21578
  todos: external_exports.array(external_exports.strictObject({ text: external_exports.string() })).optional(),
21540
21579
  acceptanceChecks: external_exports.array(external_exports.strictObject({ desc: external_exports.string() })).optional(),
21541
21580
  dependsOn: external_exports.array(external_exports.number().int().min(0)).optional(),
@@ -22562,6 +22601,84 @@ var ChatSetPinBarVisibility = defineCapability({
22562
22601
  effect: "write",
22563
22602
  idempotent: true
22564
22603
  });
22604
+ var ChatListChannels = defineCapability({
22605
+ id: "chat.list_channels",
22606
+ summary: "List the channels and one-to-one DMs you belong to, with unread counts, last activity and your role. Start here when you need a channelId for reading or sending messages.",
22607
+ input: external_exports.strictObject({}),
22608
+ effect: "read",
22609
+ idempotent: true,
22610
+ cli: { path: ["chat", "channels"] }
22611
+ });
22612
+ var ChatListMessages = defineCapability({
22613
+ id: "chat.list_messages",
22614
+ summary: "Read a page of messages in a conversation you belong to (oldest first). Page backwards with beforeSeq or catch up with afterSeq; excludeDeleted drops tombstones, topLevelOnly hides thread replies.",
22615
+ input: external_exports.strictObject({
22616
+ channelId: channelId2,
22617
+ beforeSeq: external_exports.number().int().min(0).optional(),
22618
+ afterSeq: external_exports.number().int().min(0).optional(),
22619
+ limit: external_exports.number().int().min(1).max(200).optional(),
22620
+ topLevelOnly: external_exports.boolean().optional()
22621
+ }),
22622
+ effect: "read",
22623
+ idempotent: true,
22624
+ cli: { path: ["chat", "messages", "list"] }
22625
+ });
22626
+ var ChatSearchMessages = defineCapability({
22627
+ id: "chat.search_messages",
22628
+ summary: "Search message text across channels you belong to (optionally limited to one channel). Only messages visible to you are returned; deleted messages are excluded.",
22629
+ input: external_exports.strictObject({
22630
+ q: external_exports.string().trim().min(1).max(200),
22631
+ channelId: channelId2.optional(),
22632
+ limit: external_exports.number().int().min(1).max(100).optional()
22633
+ }),
22634
+ effect: "read",
22635
+ idempotent: true,
22636
+ cli: { path: ["chat", "messages", "search"] }
22637
+ });
22638
+ var ChatSendMessage = defineCapability({
22639
+ id: "chat.send_message",
22640
+ summary: "Send a text message to a conversation you belong to, as the token owner (or as the in-product Agent). Use replyToId to quote a message and threadRootId to reply in a thread. Reuse clientId after an unknown result so a retry does not post twice.",
22641
+ input: external_exports.strictObject({
22642
+ channelId: channelId2,
22643
+ text: external_exports.string().trim().min(1).max(2e4),
22644
+ replyToId: messageId.optional(),
22645
+ threadRootId: messageId.optional(),
22646
+ clientId: external_exports.uuid().optional()
22647
+ }),
22648
+ effect: "write",
22649
+ idempotent: true,
22650
+ cli: { path: ["chat", "messages", "send"] }
22651
+ });
22652
+ var ChatThreadList = defineCapability({
22653
+ id: "chat.thread_list",
22654
+ summary: "Read the replies of a message thread you can see, oldest first. Page with beforeSeq / afterSeq; the thread root message is included.",
22655
+ input: external_exports.strictObject({
22656
+ messageId,
22657
+ beforeSeq: external_exports.number().int().min(0).optional(),
22658
+ afterSeq: external_exports.number().int().min(0).optional(),
22659
+ limit: external_exports.number().int().min(1).max(200).optional(),
22660
+ newestFirst: external_exports.boolean().optional()
22661
+ }),
22662
+ effect: "read",
22663
+ idempotent: true,
22664
+ cli: { path: ["chat", "thread", "list"] }
22665
+ });
22666
+ var ChatAddReaction = defineCapability({
22667
+ id: "chat.add_reaction",
22668
+ summary: "Add an emoji reaction to a visible message as the token owner. Repeating the same reaction is a no-op.",
22669
+ input: external_exports.strictObject({ messageId, emoji: external_exports.string().trim().min(1).max(32) }),
22670
+ effect: "write",
22671
+ idempotent: true,
22672
+ cli: { path: ["chat", "reaction", "add"] }
22673
+ });
22674
+ var ChatRemoveReaction = defineCapability({
22675
+ id: "chat.remove_reaction",
22676
+ summary: "Remove your own emoji reaction from a visible message.",
22677
+ input: external_exports.strictObject({ messageId, emoji: external_exports.string().trim().min(1).max(32) }),
22678
+ effect: "write",
22679
+ idempotent: true,
22680
+ cli: { path: ["chat", "reaction", "remove"] }
22681
+ });
22565
22682
  var ChatResolveMessageContext = defineCapability({
22566
22683
  id: "chat.resolve_message_context",
22567
22684
  summary: "Locate a visible message in a bounded context window (at most 100 messages), including old thread replies. The server resolves its conversation stream and thread root. Follow direction/cursor to extend before or after; never scan every old history page to find the target.",
@@ -22577,6 +22694,13 @@ var ChatResolveMessageContext = defineCapability({
22577
22694
  idempotent: true
22578
22695
  });
22579
22696
  var CHAT_CAPABILITIES = [
22697
+ ChatListChannels,
22698
+ ChatListMessages,
22699
+ ChatSearchMessages,
22700
+ ChatSendMessage,
22701
+ ChatThreadList,
22702
+ ChatAddReaction,
22703
+ ChatRemoveReaction,
22580
22704
  ChatListPins,
22581
22705
  ChatPinMessage,
22582
22706
  ChatUnpinMessage,
@@ -23159,7 +23283,7 @@ function buildCommandTree(options = {}) {
23159
23283
  }
23160
23284
 
23161
23285
  // src/api.ts
23162
- var CLI_VERSION = true ? "0.1.2" : "0.0.0";
23286
+ var CLI_VERSION = true ? "0.1.3" : "0.0.0";
23163
23287
  var CLI_USER_AGENT = `mosse-cli/${CLI_VERSION}`;
23164
23288
  async function callApi(request) {
23165
23289
  const headers = {
@@ -23564,7 +23688,13 @@ var SKILL_COMMAND_PATHS = [
23564
23688
  ["board", "task", "dependency-remove"],
23565
23689
  ["board", "task", "link-add"],
23566
23690
  ["board", "activity", "list"],
23567
- ["knowledge", "search"]
23691
+ ["knowledge", "search"],
23692
+ ["chat", "channels"],
23693
+ ["chat", "messages", "list"],
23694
+ ["chat", "messages", "search"],
23695
+ ["chat", "messages", "send"],
23696
+ ["chat", "thread", "list"],
23697
+ ["chat", "reaction", "add"]
23568
23698
  ];
23569
23699
  function renderSkill(tree) {
23570
23700
  const line = (path, suffix) => {
@@ -23596,7 +23726,7 @@ function renderSkill(tree) {
23596
23726
  ...missing.length ? ["", `[warn] skill references missing commands: ${missing.map((p) => p.join(" ")).join(", ")}`] : []
23597
23727
  ].join("\n");
23598
23728
  }
23599
- var SKILL_DESCRIPTION = "Use the Mosse CLI (mosse) to read and write Mosse boards: tasks and checklists, dependencies, links, activity, projects, and knowledge search. Use when the user asks about Mosse tasks or projects, or when a mosse command is needed.";
23729
+ var SKILL_DESCRIPTION = "Use the Mosse CLI (mosse) to read and write Mosse boards and chat: tasks and checklists, dependencies, links, activity, projects, sending and searching messages, reactions and threads, and knowledge search. Use when the user asks about Mosse tasks, projects, channels or messages, or when a mosse command is needed.";
23600
23730
  var skillVersionMark = (version3) => `<!-- mosse-skill-version: ${version3} -->`;
23601
23731
  function renderSkillMd(tree, version3 = CLI_VERSION) {
23602
23732
  return [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mosse-ai/cli",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mosse": "./dist/index.js"
package/skill/SKILL.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: mosse
3
- description: "Use the Mosse CLI (mosse) to read and write Mosse boards: tasks and checklists, dependencies, links, activity, projects, and knowledge search. Use when the user asks about Mosse tasks or projects, or when a mosse command is needed."
3
+ description: "Use the Mosse CLI (mosse) to read and write Mosse boards and chat: tasks and checklists, dependencies, links, activity, projects, sending and searching messages, reactions and threads, and knowledge search. Use when the user asks about Mosse tasks, projects, channels or messages, or when a mosse command is needed."
4
4
  ---
5
5
 
6
6
  <!-- mosse-skill-version: 0.0.0 -->