@vess-id/ai-identity 0.9.0 → 0.10.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/dist/index.d.ts CHANGED
@@ -27,7 +27,7 @@ export type { ActionParamDisplay } from './registry/action-summary';
27
27
  export { generateKeyPair, signJWT, verifyJWT, generateNonce } from './utils/crypto';
28
28
  export { SDJwtClient } from './utils/sdjwt-client';
29
29
  export { createDidJwk, extractPublicKey, extractPublicKeyFromDid, isValidDidJwk, getKeyIdFromDid, publicKeysMatch, } from './did/did-utils';
30
- export { TargetResolver } from './resolver/target-resolver';
30
+ export { TargetResolver, extractProjectKey } from './resolver/target-resolver';
31
31
  export * from './types';
32
32
  export { isWriteAction, WRITE_ACTION_NAMES } from './utils/action-classifier';
33
33
  export { resolveUserTier, getTierLimits, isUnlimited } from './utils/tier-utils';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGrD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,YAAY,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC/E,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,iBAAiB,GAClB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,mCAAmC,CAAA;AAG1C,cAAc,WAAW,CAAA;AAGzB,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAGzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACtE,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAErD,cAAc,YAAY,CAAA;AAG1B,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AACtH,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAGnE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGlD,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAG3D,cAAc,SAAS,CAAA;AAGvB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAG7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGhF,eAAO,MAAM,OAAO,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGrD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,YAAY,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC/E,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,iBAAiB,GAClB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,mCAAmC,CAAA;AAG1C,cAAc,WAAW,CAAA;AAGzB,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAGzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACtE,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAErD,cAAc,YAAY,CAAA;AAG1B,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AACtH,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAGnE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGlD,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAG9E,cAAc,SAAS,CAAA;AAGvB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAG7E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGhF,eAAO,MAAM,OAAO,UAAU,CAAA"}
package/dist/index.js CHANGED
@@ -96,6 +96,7 @@ __export(index_exports, {
96
96
  credentialStatusToVCStatus: () => credentialStatusToVCStatus,
97
97
  defaultConstraintEvaluator: () => defaultConstraintEvaluator,
98
98
  evaluateConstraints: () => evaluateConstraints,
99
+ extractProjectKey: () => extractProjectKey,
99
100
  extractPublicKey: () => extractPublicKey,
100
101
  extractPublicKeyFromDid: () => extractPublicKeyFromDid,
101
102
  generateActionParamsDisplay: () => generateActionParamsDisplay,
@@ -2119,7 +2120,7 @@ var ToolManager = class {
2119
2120
  projectKey: "string",
2120
2121
  summary: "string",
2121
2122
  description: "string?",
2122
- issueType: "string",
2123
+ issueTypeName: "string",
2123
2124
  priority: "string?",
2124
2125
  assignee: "string?"
2125
2126
  }
@@ -4686,11 +4687,39 @@ var ACTION_REGISTRY = {
4686
4687
  },
4687
4688
  version: "1.0.0"
4688
4689
  },
4690
+ {
4691
+ action: "slack.message.read_paginated",
4692
+ resource_type: "slack:channel",
4693
+ required_relations: ["viewer", "editor", "admin", "owner"],
4694
+ required_scopes: ["channels:history", "groups:history"],
4695
+ capability: "slack.read.basic",
4696
+ input_schema: {
4697
+ type: "object",
4698
+ properties: {
4699
+ channel: { type: "string", description: "Channel ID, channel name, or channel name with # prefix" },
4700
+ cursor: { type: "string", description: "Pagination cursor from previous response" },
4701
+ limit: { type: "integer", minimum: 1, maximum: 30 }
4702
+ },
4703
+ required: ["channel"],
4704
+ additionalProperties: false
4705
+ },
4706
+ constraints: { rate_bucket: "slack.read" },
4707
+ effects: ["Read:Message"],
4708
+ risk: "low",
4709
+ target_bindings: {
4710
+ resource_id: { source: "param", param: "channel" }
4711
+ },
4712
+ version: "1.0.0"
4713
+ },
4689
4714
  {
4690
4715
  action: "slack.batch.read",
4691
4716
  resource_type: "slack:channel",
4692
4717
  required_relations: ["viewer", "editor", "admin", "owner"],
4693
- required_scopes: ["channels:read", "groups:read", "channels:history", "groups:history"],
4718
+ // Documentation only NOT used for runtime access control.
4719
+ // Actual permission granting uses parseSlackScopes (oauth.service.ts) with OR-logic:
4720
+ // any read scope + any history scope grants slack.batch.read.
4721
+ // Tokens with partial scopes (e.g. channels:read + channels:history) will still receive this permission.
4722
+ required_scopes: ["channels:read", "groups:read", "im:read", "mpim:read", "channels:history", "groups:history", "im:history", "mpim:history"],
4694
4723
  capability: "slack.read.basic",
4695
4724
  input_schema: {
4696
4725
  type: "object",
@@ -5062,10 +5091,10 @@ var ACTION_REGISTRY = {
5062
5091
  input_schema: {
5063
5092
  type: "object",
5064
5093
  properties: {
5065
- calendarId: { type: "string" },
5066
- timeMin: { type: "string" },
5067
- timeMax: { type: "string" },
5068
- maxResults: { type: "integer", minimum: 1, maximum: 2500 }
5094
+ calendarId: { type: "string", description: "Calendar ID (email address). Defaults to primary calendar." },
5095
+ timeMin: { type: "string", description: 'Lower bound (inclusive) for event start time, as ISO 8601 datetime, e.g. "2025-01-15T00:00:00Z"' },
5096
+ timeMax: { type: "string", description: 'Upper bound (exclusive) for event start time, as ISO 8601 datetime, e.g. "2025-01-16T00:00:00Z"' },
5097
+ maxResults: { type: "integer", minimum: 1, maximum: 2500, description: "Maximum number of events to return" }
5069
5098
  },
5070
5099
  additionalProperties: false
5071
5100
  },
@@ -5109,13 +5138,29 @@ var ACTION_REGISTRY = {
5109
5138
  input_schema: {
5110
5139
  type: "object",
5111
5140
  properties: {
5112
- calendarId: { type: "string" },
5113
- summary: { type: "string", minLength: 1 },
5114
- description: { type: "string" },
5115
- start: { type: "object" },
5116
- end: { type: "object" },
5117
- attendees: { type: "array" },
5118
- location: { type: "string" }
5141
+ calendarId: { type: "string", description: "Calendar ID (email address). Defaults to primary calendar." },
5142
+ summary: { type: "string", minLength: 1, description: "Event title" },
5143
+ description: { type: "string", description: "Event description" },
5144
+ start: {
5145
+ type: "object",
5146
+ description: "Start time. Use dateTime + timeZone for timed events, or date for all-day events.",
5147
+ properties: {
5148
+ dateTime: { type: "string", description: 'ISO 8601 datetime, e.g. "2025-01-15T10:00:00"' },
5149
+ date: { type: "string", description: 'Date for all-day event, e.g. "2025-01-15"' },
5150
+ timeZone: { type: "string", description: 'IANA time zone, e.g. "Asia/Tokyo"' }
5151
+ }
5152
+ },
5153
+ end: {
5154
+ type: "object",
5155
+ description: "End time. Use dateTime + timeZone for timed events, or date for all-day events.",
5156
+ properties: {
5157
+ dateTime: { type: "string", description: 'ISO 8601 datetime, e.g. "2025-01-15T11:00:00"' },
5158
+ date: { type: "string", description: 'Date for all-day event, e.g. "2025-01-16"' },
5159
+ timeZone: { type: "string", description: 'IANA time zone, e.g. "Asia/Tokyo"' }
5160
+ }
5161
+ },
5162
+ attendees: { type: "array", description: "List of attendee objects with email field", items: { type: "object", properties: { email: { type: "string" } } } },
5163
+ location: { type: "string", description: "Event location" }
5119
5164
  },
5120
5165
  required: ["summary", "start", "end"],
5121
5166
  additionalProperties: false
@@ -5140,14 +5185,30 @@ var ACTION_REGISTRY = {
5140
5185
  input_schema: {
5141
5186
  type: "object",
5142
5187
  properties: {
5143
- calendarId: { type: "string" },
5144
- eventId: { type: "string", minLength: 1 },
5145
- summary: { type: "string" },
5146
- description: { type: "string" },
5147
- start: { type: "object" },
5148
- end: { type: "object" },
5149
- attendees: { type: "array" },
5150
- location: { type: "string" }
5188
+ calendarId: { type: "string", description: "Calendar ID (email address). Defaults to primary calendar." },
5189
+ eventId: { type: "string", minLength: 1, description: "Event ID to update" },
5190
+ summary: { type: "string", description: "Event title" },
5191
+ description: { type: "string", description: "Event description" },
5192
+ start: {
5193
+ type: "object",
5194
+ description: "Start time. Use dateTime + timeZone for timed events, or date for all-day events.",
5195
+ properties: {
5196
+ dateTime: { type: "string", description: 'ISO 8601 datetime, e.g. "2025-01-15T10:00:00"' },
5197
+ date: { type: "string", description: 'Date for all-day event, e.g. "2025-01-15"' },
5198
+ timeZone: { type: "string", description: 'IANA time zone, e.g. "Asia/Tokyo"' }
5199
+ }
5200
+ },
5201
+ end: {
5202
+ type: "object",
5203
+ description: "End time. Use dateTime + timeZone for timed events, or date for all-day events.",
5204
+ properties: {
5205
+ dateTime: { type: "string", description: 'ISO 8601 datetime, e.g. "2025-01-15T11:00:00"' },
5206
+ date: { type: "string", description: 'Date for all-day event, e.g. "2025-01-16"' },
5207
+ timeZone: { type: "string", description: 'IANA time zone, e.g. "Asia/Tokyo"' }
5208
+ }
5209
+ },
5210
+ attendees: { type: "array", description: "List of attendee objects with email field", items: { type: "object", properties: { email: { type: "string" } } } },
5211
+ location: { type: "string", description: "Event location" }
5151
5212
  },
5152
5213
  required: ["eventId"],
5153
5214
  additionalProperties: false
@@ -5156,7 +5217,7 @@ var ACTION_REGISTRY = {
5156
5217
  effects: ["Update:Event"],
5157
5218
  risk: "medium",
5158
5219
  target_bindings: {
5159
- resource_id: { source: "param", param: "eventId" },
5220
+ resource_id: { source: "param", param: "calendarId", default: "primary" },
5160
5221
  secondary: [
5161
5222
  { name: "attendees", source: { source: "param", param: "attendees" }, type: "participant" }
5162
5223
  ]
@@ -5182,7 +5243,7 @@ var ACTION_REGISTRY = {
5182
5243
  effects: ["Delete:Event"],
5183
5244
  risk: "high",
5184
5245
  target_bindings: {
5185
- resource_id: { source: "param", param: "eventId" }
5246
+ resource_id: { source: "param", param: "calendarId", default: "primary" }
5186
5247
  },
5187
5248
  version: "1.0.0"
5188
5249
  },
@@ -5318,7 +5379,7 @@ var ACTION_REGISTRY = {
5318
5379
  effects: ["Read:Worklog"],
5319
5380
  risk: "low",
5320
5381
  target_bindings: {
5321
- resource_id: { source: "param", param: "issueIdOrKey" }
5382
+ resource_id: { source: "param", param: "issueIdOrKey", fallback_param: "issueKey" }
5322
5383
  },
5323
5384
  version: "1.0.0"
5324
5385
  },
@@ -5340,13 +5401,13 @@ var ACTION_REGISTRY = {
5340
5401
  effects: ["Read:Issue"],
5341
5402
  risk: "low",
5342
5403
  target_bindings: {
5343
- resource_id: { source: "param", param: "issueIdOrKey" }
5404
+ resource_id: { source: "param", param: "issueIdOrKey", fallback_param: "issueKey" }
5344
5405
  },
5345
5406
  version: "1.0.0"
5346
5407
  },
5347
5408
  {
5348
5409
  action: "jira.issue.create",
5349
- resource_type: "jira:issue",
5410
+ resource_type: "jira:project",
5350
5411
  required_relations: ["editor", "act_as"],
5351
5412
  required_scopes: ["write:jira-work"],
5352
5413
  capability: "jira.write.basic",
@@ -5356,11 +5417,12 @@ var ACTION_REGISTRY = {
5356
5417
  projectKey: { type: "string", minLength: 1 },
5357
5418
  summary: { type: "string", minLength: 1 },
5358
5419
  description: { type: "string" },
5359
- issueType: { type: "string", minLength: 1 },
5420
+ issueTypeName: { type: "string", minLength: 1, description: "Issue type name (default: Task)" },
5360
5421
  priority: { type: "string" },
5361
- assignee: { type: "string" }
5422
+ assigneeAccountId: { type: "string" },
5423
+ labels: { type: "array", items: { type: "string" } }
5362
5424
  },
5363
- required: ["projectKey", "summary", "issueType"],
5425
+ required: ["projectKey", "summary"],
5364
5426
  additionalProperties: false
5365
5427
  },
5366
5428
  constraints: { rate_bucket: "jira.write" },
@@ -5373,7 +5435,7 @@ var ACTION_REGISTRY = {
5373
5435
  },
5374
5436
  {
5375
5437
  action: "jira.issue.update",
5376
- resource_type: "jira:issue",
5438
+ resource_type: "jira:project",
5377
5439
  required_relations: ["editor", "act_as"],
5378
5440
  required_scopes: ["write:jira-work"],
5379
5441
  capability: "jira.write.basic",
@@ -5383,9 +5445,9 @@ var ACTION_REGISTRY = {
5383
5445
  issueIdOrKey: { type: "string", minLength: 1 },
5384
5446
  summary: { type: "string" },
5385
5447
  description: { type: "string" },
5386
- status: { type: "string" },
5387
5448
  priority: { type: "string" },
5388
- assignee: { type: "string" }
5449
+ assigneeAccountId: { type: "string" },
5450
+ labels: { type: "array", items: { type: "string" } }
5389
5451
  },
5390
5452
  required: ["issueIdOrKey"],
5391
5453
  additionalProperties: false
@@ -5394,13 +5456,13 @@ var ACTION_REGISTRY = {
5394
5456
  effects: ["Update:Issue"],
5395
5457
  risk: "high",
5396
5458
  target_bindings: {
5397
- resource_id: { source: "param", param: "issueIdOrKey" }
5459
+ resource_id: { source: "param", param: "issueIdOrKey", fallback_param: "issueKey", derive: "project_key" }
5398
5460
  },
5399
5461
  version: "1.0.0"
5400
5462
  },
5401
5463
  {
5402
5464
  action: "jira.issue.delete",
5403
- resource_type: "jira:issue",
5465
+ resource_type: "jira:project",
5404
5466
  required_relations: ["admin", "owner", "act_as"],
5405
5467
  required_scopes: ["write:jira-work"],
5406
5468
  capability: "jira.write.basic",
@@ -5416,7 +5478,98 @@ var ACTION_REGISTRY = {
5416
5478
  effects: ["Delete:Issue"],
5417
5479
  risk: "high",
5418
5480
  target_bindings: {
5419
- resource_id: { source: "param", param: "issueIdOrKey" }
5481
+ resource_id: { source: "param", param: "issueIdOrKey", fallback_param: "issueKey", derive: "project_key" }
5482
+ },
5483
+ version: "1.0.0"
5484
+ },
5485
+ {
5486
+ action: "jira.comment.create",
5487
+ resource_type: "jira:project",
5488
+ required_relations: ["editor", "act_as"],
5489
+ required_scopes: ["write:jira-work"],
5490
+ capability: "jira.write.basic",
5491
+ input_schema: {
5492
+ type: "object",
5493
+ properties: {
5494
+ issueIdOrKey: { type: "string", minLength: 1 },
5495
+ body: { type: "string", minLength: 1 }
5496
+ },
5497
+ required: ["issueIdOrKey", "body"],
5498
+ additionalProperties: false
5499
+ },
5500
+ constraints: { rate_bucket: "jira.write" },
5501
+ effects: ["Create:Comment"],
5502
+ // high: comments are publicly visible to all project members, consistent with jira.issue.update
5503
+ risk: "high",
5504
+ target_bindings: {
5505
+ resource_id: { source: "param", param: "issueIdOrKey", fallback_param: "issueKey", derive: "project_key" }
5506
+ },
5507
+ version: "1.0.0"
5508
+ },
5509
+ {
5510
+ action: "jira.comment.read",
5511
+ resource_type: "jira:project",
5512
+ required_relations: ["viewer", "editor", "act_as"],
5513
+ required_scopes: ["read:jira-work"],
5514
+ capability: "jira.read.basic",
5515
+ input_schema: {
5516
+ type: "object",
5517
+ properties: {
5518
+ issueIdOrKey: { type: "string", minLength: 1 }
5519
+ },
5520
+ required: ["issueIdOrKey"],
5521
+ additionalProperties: false
5522
+ },
5523
+ constraints: { rate_bucket: "jira.read" },
5524
+ effects: ["Read:Comment"],
5525
+ risk: "low",
5526
+ target_bindings: {
5527
+ resource_id: { source: "param", param: "issueIdOrKey", fallback_param: "issueKey", derive: "project_key" }
5528
+ },
5529
+ version: "1.0.0"
5530
+ },
5531
+ {
5532
+ action: "jira.issue.transition",
5533
+ resource_type: "jira:project",
5534
+ required_relations: ["editor", "act_as"],
5535
+ required_scopes: ["write:jira-work"],
5536
+ capability: "jira.write.basic",
5537
+ input_schema: {
5538
+ type: "object",
5539
+ properties: {
5540
+ issueIdOrKey: { type: "string", minLength: 1 },
5541
+ transitionId: { type: "string", minLength: 1 }
5542
+ },
5543
+ required: ["issueIdOrKey", "transitionId"],
5544
+ additionalProperties: false
5545
+ },
5546
+ constraints: { rate_bucket: "jira.write" },
5547
+ effects: ["Update:IssueStatus"],
5548
+ risk: "high",
5549
+ target_bindings: {
5550
+ resource_id: { source: "param", param: "issueIdOrKey", fallback_param: "issueKey", derive: "project_key" }
5551
+ },
5552
+ version: "1.0.0"
5553
+ },
5554
+ {
5555
+ action: "jira.transition.list",
5556
+ resource_type: "jira:project",
5557
+ required_relations: ["viewer", "editor", "act_as"],
5558
+ required_scopes: ["read:jira-work"],
5559
+ capability: "jira.read.basic",
5560
+ input_schema: {
5561
+ type: "object",
5562
+ properties: {
5563
+ issueIdOrKey: { type: "string", minLength: 1 }
5564
+ },
5565
+ required: ["issueIdOrKey"],
5566
+ additionalProperties: false
5567
+ },
5568
+ constraints: { rate_bucket: "jira.read" },
5569
+ effects: ["Read:Transition"],
5570
+ risk: "low",
5571
+ target_bindings: {
5572
+ resource_id: { source: "param", param: "issueIdOrKey", fallback_param: "issueKey", derive: "project_key" }
5420
5573
  },
5421
5574
  version: "1.0.0"
5422
5575
  },
@@ -5533,7 +5686,7 @@ var ACTION_REGISTRY = {
5533
5686
  {
5534
5687
  capability: "slack.read.basic",
5535
5688
  description: "Read channels, messages, and user info",
5536
- includes: ["slack.channel.read", "slack.user.read", "slack.message.read", "slack.batch.read"],
5689
+ includes: ["slack.channel.read", "slack.user.read", "slack.message.read", "slack.message.read_paginated", "slack.batch.read"],
5537
5690
  version: "1.0.0"
5538
5691
  },
5539
5692
  {
@@ -5581,13 +5734,13 @@ var ACTION_REGISTRY = {
5581
5734
  {
5582
5735
  capability: "jira.read.basic",
5583
5736
  description: "Read Jira issues, projects, boards, and sprints",
5584
- includes: ["jira.project.read", "jira.board.read", "jira.sprint.read", "jira.issue.list", "jira.issue.search", "jira.worklog.read", "jira.issue.read", "jira.batch.read"],
5737
+ includes: ["jira.project.read", "jira.board.read", "jira.sprint.read", "jira.issue.list", "jira.issue.search", "jira.worklog.read", "jira.issue.read", "jira.batch.read", "jira.comment.read", "jira.transition.list"],
5585
5738
  version: "1.0.0"
5586
5739
  },
5587
5740
  {
5588
5741
  capability: "jira.write.basic",
5589
5742
  description: "Create, update, and delete Jira issues",
5590
- includes: ["jira.issue.create", "jira.issue.update", "jira.issue.delete"],
5743
+ includes: ["jira.issue.create", "jira.issue.update", "jira.issue.delete", "jira.comment.create", "jira.issue.transition"],
5591
5744
  version: "1.0.0"
5592
5745
  }
5593
5746
  ]
@@ -5796,7 +5949,7 @@ var ACTION_DISPLAY_CONFIGS = {
5796
5949
  summaryTemplate: (p) => {
5797
5950
  const parts = [];
5798
5951
  if (p.summary) parts.push(p.summary);
5799
- if (p.start) parts.push(`(${p.start})`);
5952
+ if (p.start) parts.push(`(${formatValue(p.start)})`);
5800
5953
  return parts.join(" ");
5801
5954
  },
5802
5955
  displayFields: [
@@ -5810,7 +5963,7 @@ var ACTION_DISPLAY_CONFIGS = {
5810
5963
  summaryTemplate: (p) => {
5811
5964
  const parts = [];
5812
5965
  if (p.summary) parts.push(p.summary);
5813
- if (p.start) parts.push(`(${p.start})`);
5966
+ if (p.start) parts.push(`(${formatValue(p.start)})`);
5814
5967
  return parts.join(" ");
5815
5968
  },
5816
5969
  displayFields: [
@@ -5854,8 +6007,24 @@ function truncate(text, maxLength) {
5854
6007
  }
5855
6008
  function formatValue(value) {
5856
6009
  if (value === null || value === void 0) return "";
5857
- if (Array.isArray(value)) return value.map(String).join(", ");
5858
- if (typeof value === "object") return JSON.stringify(value);
6010
+ if (Array.isArray(value)) {
6011
+ return value.map((item) => {
6012
+ if (item && typeof item === "object") {
6013
+ const email = item.email;
6014
+ if (email) return String(email);
6015
+ return JSON.stringify(item);
6016
+ }
6017
+ return String(item);
6018
+ }).join(", ");
6019
+ }
6020
+ if (typeof value === "object") {
6021
+ const obj = value;
6022
+ if (obj.dateTime) {
6023
+ return obj.timeZone ? `${obj.dateTime} (${obj.timeZone})` : String(obj.dateTime);
6024
+ }
6025
+ if (obj.date) return String(obj.date);
6026
+ return JSON.stringify(value);
6027
+ }
5859
6028
  return String(value);
5860
6029
  }
5861
6030
  var ACTION_PARAMS_MAX_SIZE = 1e4;
@@ -5889,6 +6058,11 @@ function generateActionParamsDisplay(action, params) {
5889
6058
  }
5890
6059
 
5891
6060
  // src/resolver/target-resolver.ts
6061
+ var PROJECT_KEY_PATTERN = /^([A-Z][A-Z0-9_]+)-\d+$/;
6062
+ function extractProjectKey(value) {
6063
+ const match = value.match(PROJECT_KEY_PATTERN);
6064
+ return match ? match[1] : null;
6065
+ }
5892
6066
  var TargetResolver = class {
5893
6067
  /**
5894
6068
  * Resolve target bindings against tool invocation parameters.
@@ -5916,20 +6090,27 @@ var TargetResolver = class {
5916
6090
  }
5917
6091
  const paramBinding = binding;
5918
6092
  let rawValue = params[paramBinding.param];
6093
+ if (rawValue == null && paramBinding.fallback_param) {
6094
+ rawValue = params[paramBinding.fallback_param];
6095
+ }
5919
6096
  if (rawValue == null && paramBinding.default != null) {
5920
6097
  rawValue = paramBinding.default;
5921
6098
  }
5922
6099
  if (rawValue == null) return { value: null };
5923
6100
  if (typeof rawValue !== "string") return { value: null };
6101
+ let strValue = rawValue;
6102
+ if (paramBinding.derive === "project_key") {
6103
+ strValue = extractProjectKey(strValue) ?? strValue;
6104
+ }
5924
6105
  if (paramBinding.multi) {
5925
6106
  const separator = paramBinding.separator ?? ",";
5926
- const values = rawValue.split(separator).map((v) => v.trim()).filter((v) => v.length > 0);
6107
+ const values = strValue.split(separator).map((v) => v.trim()).filter((v) => v.length > 0);
5927
6108
  return {
5928
6109
  value: values[0] ?? null,
5929
6110
  values
5930
6111
  };
5931
6112
  }
5932
- return { value: rawValue };
6113
+ return { value: strValue };
5933
6114
  }
5934
6115
  resolveSecondary(secondary, params, context) {
5935
6116
  if (!secondary || secondary.length === 0) return [];
@@ -6048,6 +6229,7 @@ var version = "0.0.1";
6048
6229
  credentialStatusToVCStatus,
6049
6230
  defaultConstraintEvaluator,
6050
6231
  evaluateConstraints,
6232
+ extractProjectKey,
6051
6233
  extractPublicKey,
6052
6234
  extractPublicKeyFromDid,
6053
6235
  generateActionParamsDisplay,