@mosse-ai/cli 0.1.2 → 0.1.4

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
@@ -48,6 +48,9 @@ var exact = {
48
48
  "/v1/my/scope-overview": ["GET"],
49
49
  "/v1/my/keychain/overview": ["GET"],
50
50
  "/v1/connections": ["GET", "POST"],
51
+ "/v1/github/app/install": ["POST"],
52
+ "/v1/github/app/bind/start": ["POST"],
53
+ "/v1/github/app/installations": ["GET"],
51
54
  "/v1/connections-maintained": ["GET"],
52
55
  "/v1/my/keychain/drops": ["POST"],
53
56
  "/v1/my/connectors/oauth/status": ["GET"],
@@ -189,6 +192,36 @@ var patterns = [
189
192
  methods: ["GET", "DELETE"],
190
193
  sample: "/v1/my/scope-skills/sk-1"
191
194
  },
195
+ {
196
+ pattern: /^\/v1\/github\/app\/installations\/[A-Za-z0-9_-]+$/,
197
+ methods: ["DELETE"],
198
+ sample: "/v1/github/app/installations/c-1"
199
+ },
200
+ {
201
+ pattern: /^\/v1\/github\/app\/repositories\/[A-Za-z0-9_-]+\/branches$/,
202
+ methods: ["GET"],
203
+ sample: "/v1/github/app/repositories/r-1/branches"
204
+ },
205
+ {
206
+ pattern: /^\/v1\/github\/app\/repositories\/[A-Za-z0-9_-]+\/policy$/,
207
+ methods: ["PUT"],
208
+ sample: "/v1/github/app/repositories/r-1/policy"
209
+ },
210
+ {
211
+ pattern: /^\/v1\/github\/app\/repositories\/[A-Za-z0-9_-]+\/grants$/,
212
+ methods: ["PUT"],
213
+ sample: "/v1/github/app/repositories/r-1/grants"
214
+ },
215
+ {
216
+ pattern: /^\/v1\/github\/app\/installations\/[A-Za-z0-9_-]+\/repositories$/,
217
+ methods: ["GET"],
218
+ sample: "/v1/github/app/installations/c-1/repositories"
219
+ },
220
+ {
221
+ pattern: /^\/v1\/github\/app\/installations\/[A-Za-z0-9_-]+\/refresh$/,
222
+ methods: ["POST"],
223
+ sample: "/v1/github/app/installations/c-1/refresh"
224
+ },
192
225
  {
193
226
  pattern: /^\/v1\/connections\/[A-Za-z0-9_-]+\/rotate$/,
194
227
  methods: ["POST"],
@@ -21264,7 +21297,7 @@ function actionOf(id) {
21264
21297
  return id.slice(id.indexOf(".") + 1);
21265
21298
  }
21266
21299
  function patScopeOf(spec) {
21267
- return `${domainOf(spec.id)}:${spec.effect === "read" ? "read" : "write"}`;
21300
+ return spec.patScope ?? `${domainOf(spec.id)}:${spec.effect === "read" ? "read" : "write"}`;
21268
21301
  }
21269
21302
  function mcpToolNameOf(spec) {
21270
21303
  return spec.mcpName ?? spec.id.replace(".", "_");
@@ -21308,6 +21341,14 @@ function registryProblems(specs) {
21308
21341
  if (mcpNames.has(mcp))
21309
21342
  problems6.push(`${s.id}: duplicate MCP tool name ${mcp}`);
21310
21343
  mcpNames.add(mcp);
21344
+ if (s.patScope) {
21345
+ if (!s.patScope.startsWith(`${domainOf(s.id)}:`))
21346
+ problems6.push(`${s.id}: patScope ${s.patScope} must stay in domain ${domainOf(s.id)}`);
21347
+ if (!/^[a-z]+:(read|write|admin)$/.test(s.patScope))
21348
+ problems6.push(`${s.id}: invalid patScope ${s.patScope}`);
21349
+ if (s.effect === "read" && s.patScope !== `${domainOf(s.id)}:read`)
21350
+ problems6.push(`${s.id}: read capabilities cannot use patScope ${s.patScope}`);
21351
+ }
21311
21352
  if (s.principals && s.principals.length < 2 && !s.reason)
21312
21353
  problems6.push(`${s.id}: narrowed principals need a reason`);
21313
21354
  if (s.runScoped && (s.principals?.length !== 1 || s.principals[0] !== "agent"))
@@ -21397,7 +21438,7 @@ var BoardUpdateTask = defineCapability({
21397
21438
  id: "board.update_task",
21398
21439
  summary: "Update task fields.",
21399
21440
  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.",
21441
+ "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
21442
  { text: "A project admin other than the assignee can override designated review.", principal: "human" },
21402
21443
  { text: "Cannot mark your assigned task done; a person confirms.", principal: "agent" }
21403
21444
  ],
@@ -21411,6 +21452,18 @@ var BoardUpdateTask = defineCapability({
21411
21452
  assignee: memberRef.nullable().optional(),
21412
21453
  reviewer: memberRef.nullable().optional(),
21413
21454
  dueDate: external_exports.string().nullable().optional(),
21455
+ /** 钟点 "HH:MM"(本地墙上时间;要求 dueDate 非空)。 */
21456
+ dueTime: external_exports.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/).nullable().optional(),
21457
+ /** 预计时长(分钟,1–10080;要求 dueTime 非空)。 */
21458
+ durationMin: external_exports.number().int().min(1).max(10080).nullable().optional(),
21459
+ /** 重复预设:完成时生成下一次(同一套 task,不另建实体)。 */
21460
+ recurrence: external_exports.enum(["daily", "weekly", "monthly"]).nullable().optional(),
21461
+ /** 重复结束日期(YYYY-MM-DD,含当天)。 */
21462
+ recurrenceUntil: external_exports.string().date().nullable().optional(),
21463
+ /** 到点提醒提前量(分钟;0 = 准点,5/10/15/30/60/120)。 */
21464
+ 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(),
21465
+ /** 跳过一次重复:当前任务置 canceled 并生成下一次(不能与 status 同时给)。 */
21466
+ skipOccurrence: external_exports.boolean().optional(),
21414
21467
  todos: todoItems.optional(),
21415
21468
  acceptanceChecks: acceptanceCheckItems.optional(),
21416
21469
  /** 管理员绕过(完成规则 v2 §3:档 3 只绕过「只有审阅人能通过」;项目管理员、本人不是负责人;原因选填)。Agent 一律拒(策略表)。 */
@@ -21476,7 +21529,7 @@ var BoardCreateTask = defineCapability({
21476
21529
  id: "board.create_task",
21477
21530
  summary: "Create one backlog/todo task.",
21478
21531
  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.",
21532
+ "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
21533
  {
21481
21534
  text: "Prefer {{board.create_tasks}} for discussed work; partner confirms.",
21482
21535
  principal: "agent"
@@ -21491,6 +21544,18 @@ var BoardCreateTask = defineCapability({
21491
21544
  reviewer: memberRef.nullable().optional(),
21492
21545
  priority: external_exports.enum(TASK_PRIORITIES).optional(),
21493
21546
  dueDate: external_exports.string().nullable().optional(),
21547
+ /** 钟点 "HH:MM"(本地墙上时间;要求 dueDate 非空)。 */
21548
+ dueTime: external_exports.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/).nullable().optional(),
21549
+ /** 预计时长(分钟,1–10080;要求 dueTime 非空)。 */
21550
+ durationMin: external_exports.number().int().min(1).max(10080).nullable().optional(),
21551
+ /** 重复预设(MD-512 P3):daily / weekly / monthly;完成时生成下一次。 */
21552
+ recurrence: external_exports.enum(["daily", "weekly", "monthly"]).nullable().optional(),
21553
+ /** 重复结束日期(YYYY-MM-DD,含当天)。 */
21554
+ recurrenceUntil: external_exports.string().date().nullable().optional(),
21555
+ /** 到点提醒提前量(分钟;0 = 准点)。 */
21556
+ 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(),
21557
+ /** 跳过一次重复(当前任务置 canceled 并生成下一次;不能与 status 同时给)。 */
21558
+ skipOccurrence: external_exports.boolean().optional(),
21494
21559
  parentTaskId: uuid8.nullable().optional(),
21495
21560
  clientId: external_exports.string().max(200).nullable().optional(),
21496
21561
  /** 来源消息(任务回链到它,进展回到它的 thread)。系统内 Agent 不给,由会话派生(与 create_tasks 同一规则)。 */
@@ -21536,6 +21601,21 @@ var BoardCreateTasks = defineCapability({
21536
21601
  title: external_exports.string(),
21537
21602
  description: external_exports.string().optional(),
21538
21603
  priority: external_exports.enum(TASK_PRIORITIES).optional(),
21604
+ /** 每张任务各自的时间(与 create_task 同一套字段/约束)。 */
21605
+ dueDate: external_exports.string().nullable().optional(),
21606
+ dueTime: external_exports.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/).nullable().optional(),
21607
+ durationMin: external_exports.number().int().min(1).max(10080).nullable().optional(),
21608
+ recurrence: external_exports.enum(["daily", "weekly", "monthly"]).nullable().optional(),
21609
+ recurrenceUntil: external_exports.string().date().nullable().optional(),
21610
+ reminderLeadMin: external_exports.union([
21611
+ external_exports.literal(0),
21612
+ external_exports.literal(5),
21613
+ external_exports.literal(10),
21614
+ external_exports.literal(15),
21615
+ external_exports.literal(30),
21616
+ external_exports.literal(60),
21617
+ external_exports.literal(120)
21618
+ ]).optional(),
21539
21619
  todos: external_exports.array(external_exports.strictObject({ text: external_exports.string() })).optional(),
21540
21620
  acceptanceChecks: external_exports.array(external_exports.strictObject({ desc: external_exports.string() })).optional(),
21541
21621
  dependsOn: external_exports.array(external_exports.number().int().min(0)).optional(),
@@ -22351,6 +22431,7 @@ var KnowledgePurgeKb = defineCapability({
22351
22431
  summary: "Permanently delete an archived knowledge base with its documents and sharing. This cannot be undone. For in-product agents: this always asks the person you are talking with to confirm.",
22352
22432
  input: external_exports.strictObject({ kbId }),
22353
22433
  effect: "destructive",
22434
+ patScope: "knowledge:admin",
22354
22435
  external: true,
22355
22436
  highRisk: "always"
22356
22437
  });
@@ -22359,6 +22440,7 @@ var KnowledgeGrantKb = defineCapability({
22359
22440
  summary: "Share a knowledge base with a person's personal scope or a channel, for reading or writing. Takes effect immediately; setting it again changes the permission.",
22360
22441
  input: external_exports.strictObject({ kbId, granteeScopeId: scopeId, permission: external_exports.enum(["read", "write"]) }),
22361
22442
  effect: "write",
22443
+ patScope: "knowledge:admin",
22362
22444
  external: true,
22363
22445
  highRisk: "always",
22364
22446
  idempotent: true
@@ -22376,6 +22458,7 @@ var KnowledgeAddManager = defineCapability({
22376
22458
  summary: "Make a person a manager of a shared knowledge base you created. Managers can add files, share it and change its settings; only the creator can add or remove managers, archive or delete it. For in-product agents: this always asks the person you are talking with to confirm.",
22377
22459
  input: external_exports.strictObject({ kbId, userId: external_exports.uuid() }),
22378
22460
  effect: "write",
22461
+ patScope: "knowledge:admin",
22379
22462
  external: true,
22380
22463
  highRisk: "always",
22381
22464
  idempotent: true
@@ -22385,6 +22468,7 @@ var KnowledgeRemoveManager = defineCapability({
22385
22468
  summary: "Stop a person managing a shared knowledge base you created. For in-product agents: this always asks the person you are talking with to confirm.",
22386
22469
  input: external_exports.strictObject({ kbId, userId: external_exports.uuid() }),
22387
22470
  effect: "write",
22471
+ patScope: "knowledge:admin",
22388
22472
  external: true,
22389
22473
  highRisk: "always",
22390
22474
  idempotent: true
@@ -22394,6 +22478,7 @@ var KnowledgeRevokeKb = defineCapability({
22394
22478
  summary: "Stop sharing a knowledge base with a scope. The one it was shared with (yourself, or a channel you manage) can also use this to leave it.",
22395
22479
  input: external_exports.strictObject({ kbId, granteeScopeId: scopeId }),
22396
22480
  effect: "write",
22481
+ patScope: "knowledge:admin",
22397
22482
  external: true,
22398
22483
  highRisk: "always",
22399
22484
  idempotent: true
@@ -22456,6 +22541,7 @@ var KnowledgeSetModels = defineCapability({
22456
22541
  confirmKeyHandoff: external_exports.boolean().optional()
22457
22542
  }),
22458
22543
  effect: "write",
22544
+ patScope: "knowledge:admin",
22459
22545
  external: true,
22460
22546
  highRisk: "always",
22461
22547
  idempotent: true
@@ -22562,6 +22648,84 @@ var ChatSetPinBarVisibility = defineCapability({
22562
22648
  effect: "write",
22563
22649
  idempotent: true
22564
22650
  });
22651
+ var ChatListChannels = defineCapability({
22652
+ id: "chat.list_channels",
22653
+ 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.",
22654
+ input: external_exports.strictObject({}),
22655
+ effect: "read",
22656
+ idempotent: true,
22657
+ cli: { path: ["chat", "channels"] }
22658
+ });
22659
+ var ChatListMessages = defineCapability({
22660
+ id: "chat.list_messages",
22661
+ 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.",
22662
+ input: external_exports.strictObject({
22663
+ channelId: channelId2,
22664
+ beforeSeq: external_exports.number().int().min(0).optional(),
22665
+ afterSeq: external_exports.number().int().min(0).optional(),
22666
+ limit: external_exports.number().int().min(1).max(200).optional(),
22667
+ topLevelOnly: external_exports.boolean().optional()
22668
+ }),
22669
+ effect: "read",
22670
+ idempotent: true,
22671
+ cli: { path: ["chat", "messages", "list"] }
22672
+ });
22673
+ var ChatSearchMessages = defineCapability({
22674
+ id: "chat.search_messages",
22675
+ 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.",
22676
+ input: external_exports.strictObject({
22677
+ q: external_exports.string().trim().min(1).max(200),
22678
+ channelId: channelId2.optional(),
22679
+ limit: external_exports.number().int().min(1).max(100).optional()
22680
+ }),
22681
+ effect: "read",
22682
+ idempotent: true,
22683
+ cli: { path: ["chat", "messages", "search"] }
22684
+ });
22685
+ var ChatSendMessage = defineCapability({
22686
+ id: "chat.send_message",
22687
+ 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.",
22688
+ input: external_exports.strictObject({
22689
+ channelId: channelId2,
22690
+ text: external_exports.string().trim().min(1).max(2e4),
22691
+ replyToId: messageId.optional(),
22692
+ threadRootId: messageId.optional(),
22693
+ clientId: external_exports.uuid().optional()
22694
+ }),
22695
+ effect: "write",
22696
+ idempotent: true,
22697
+ cli: { path: ["chat", "messages", "send"] }
22698
+ });
22699
+ var ChatThreadList = defineCapability({
22700
+ id: "chat.thread_list",
22701
+ summary: "Read the replies of a message thread you can see, oldest first. Page with beforeSeq / afterSeq; the thread root message is included.",
22702
+ input: external_exports.strictObject({
22703
+ messageId,
22704
+ beforeSeq: external_exports.number().int().min(0).optional(),
22705
+ afterSeq: external_exports.number().int().min(0).optional(),
22706
+ limit: external_exports.number().int().min(1).max(200).optional(),
22707
+ newestFirst: external_exports.boolean().optional()
22708
+ }),
22709
+ effect: "read",
22710
+ idempotent: true,
22711
+ cli: { path: ["chat", "thread", "list"] }
22712
+ });
22713
+ var ChatAddReaction = defineCapability({
22714
+ id: "chat.add_reaction",
22715
+ summary: "Add an emoji reaction to a visible message as the token owner. Repeating the same reaction is a no-op.",
22716
+ input: external_exports.strictObject({ messageId, emoji: external_exports.string().trim().min(1).max(32) }),
22717
+ effect: "write",
22718
+ idempotent: true,
22719
+ cli: { path: ["chat", "reaction", "add"] }
22720
+ });
22721
+ var ChatRemoveReaction = defineCapability({
22722
+ id: "chat.remove_reaction",
22723
+ summary: "Remove your own emoji reaction from a visible message.",
22724
+ input: external_exports.strictObject({ messageId, emoji: external_exports.string().trim().min(1).max(32) }),
22725
+ effect: "write",
22726
+ idempotent: true,
22727
+ cli: { path: ["chat", "reaction", "remove"] }
22728
+ });
22565
22729
  var ChatResolveMessageContext = defineCapability({
22566
22730
  id: "chat.resolve_message_context",
22567
22731
  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 +22741,13 @@ var ChatResolveMessageContext = defineCapability({
22577
22741
  idempotent: true
22578
22742
  });
22579
22743
  var CHAT_CAPABILITIES = [
22744
+ ChatListChannels,
22745
+ ChatListMessages,
22746
+ ChatSearchMessages,
22747
+ ChatSendMessage,
22748
+ ChatThreadList,
22749
+ ChatAddReaction,
22750
+ ChatRemoveReaction,
22580
22751
  ChatListPins,
22581
22752
  ChatPinMessage,
22582
22753
  ChatUnpinMessage,
@@ -23159,7 +23330,7 @@ function buildCommandTree(options = {}) {
23159
23330
  }
23160
23331
 
23161
23332
  // src/api.ts
23162
- var CLI_VERSION = true ? "0.1.2" : "0.0.0";
23333
+ var CLI_VERSION = true ? "0.1.4" : "0.0.0";
23163
23334
  var CLI_USER_AGENT = `mosse-cli/${CLI_VERSION}`;
23164
23335
  async function callApi(request) {
23165
23336
  const headers = {
@@ -23564,7 +23735,13 @@ var SKILL_COMMAND_PATHS = [
23564
23735
  ["board", "task", "dependency-remove"],
23565
23736
  ["board", "task", "link-add"],
23566
23737
  ["board", "activity", "list"],
23567
- ["knowledge", "search"]
23738
+ ["knowledge", "search"],
23739
+ ["chat", "channels"],
23740
+ ["chat", "messages", "list"],
23741
+ ["chat", "messages", "search"],
23742
+ ["chat", "messages", "send"],
23743
+ ["chat", "thread", "list"],
23744
+ ["chat", "reaction", "add"]
23568
23745
  ];
23569
23746
  function renderSkill(tree) {
23570
23747
  const line = (path, suffix) => {
@@ -23596,7 +23773,7 @@ function renderSkill(tree) {
23596
23773
  ...missing.length ? ["", `[warn] skill references missing commands: ${missing.map((p) => p.join(" ")).join(", ")}`] : []
23597
23774
  ].join("\n");
23598
23775
  }
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.";
23776
+ 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
23777
  var skillVersionMark = (version3) => `<!-- mosse-skill-version: ${version3} -->`;
23601
23778
  function renderSkillMd(tree, version3 = CLI_VERSION) {
23602
23779
  return [
@@ -24024,7 +24201,13 @@ var HTTP_ERROR_HINTS = [
24024
24201
  /can't depend on itself/i,
24025
24202
  "dependsOn \u7528\u300C\u6279\u5185\u4E0B\u6807\u300D(0 = \u6279\u91CC\u7B2C\u4E00\u4E2A\u4EFB\u52A1),\u4E0D\u662F\u4EFB\u52A1 id;\u4E24\u4E2A\u5DF2\u6709\u4EFB\u52A1\u4E4B\u95F4\u7528 board task dependency-add\u3002"
24026
24203
  ],
24027
- [/invalid arguments/i, "\u5165\u53C2\u5F62\u72B6\u4E0D\u5BF9:\u770B\u8BE5\u547D\u4EE4\u7684 --help \u793A\u4F8B;\u6570\u7EC4/\u5BF9\u8C61\u53C2\u6570\u53EF\u4EE5\u5199\u6210 --tasks @file(\u6587\u4EF6\u91CC\u653E JSON)\u3002"]
24204
+ [/invalid arguments/i, "\u5165\u53C2\u5F62\u72B6\u4E0D\u5BF9:\u770B\u8BE5\u547D\u4EE4\u7684 --help \u793A\u4F8B;\u6570\u7EC4/\u5BF9\u8C61\u53C2\u6570\u53EF\u4EE5\u5199\u6210 --tasks @file(\u6587\u4EF6\u91CC\u653E JSON)\u3002"],
24205
+ [
24206
+ /lacks the `?[a-z]+:(read|write|admin)`? permission/i,
24207
+ "\u4EE4\u724C\u7F3A\u8FD9\u4E2A\u6743\u9650\u6863:\u53BB Settings \u2192 Agent access \u65B0\u5EFA\u4E00\u4E2A\u5E26\u8BE5\u6863\u7684\u4EE4\u724C(\u4EE4\u724C\u7684\u6863\u4F4D\u4E0D\u4F1A\u968F\u89D2\u8272\u53D8\u5316)\u3002"
24208
+ ],
24209
+ [/invalid, expired or revoked/i, "\u91CD\u65B0\u767B\u5F55:mosse auth login;\u6216\u6362\u4E00\u628A MOSSE_TOKEN\u3002"],
24210
+ [/not a member of workspace/i, "\u4F60\u4E0D\u5728\u8FD9\u4E2A workspace(\u6216\u88AB\u79FB\u9664):\u8BA9\u7BA1\u7406\u5458\u52A0\u56DE,\u6216\u6362\u4E00\u4E2A --workspace\u3002"]
24028
24211
  ];
24029
24212
  function withHttpHint(message) {
24030
24213
  for (const [pattern, hint] of HTTP_ERROR_HINTS) if (pattern.test(message)) return `${message}
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.4",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mosse": "./dist/index.js"
@@ -16,8 +16,8 @@
16
16
  "typescript": "^5.7.3",
17
17
  "esbuild": "^0.25.0",
18
18
  "get-east-asian-width": "1.7.0",
19
- "@mosse/contract": "0.0.0",
20
- "@mosse/tool-surface": "0.0.0"
19
+ "@mosse/tool-surface": "0.0.0",
20
+ "@mosse/contract": "0.0.0"
21
21
  },
22
22
  "description": "Mosse command-line client: boards, tasks, knowledge search, and agent-friendly device login.",
23
23
  "license": "UNLICENSED",
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 -->