switchroom 0.19.1 → 0.19.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.
Files changed (80) hide show
  1. package/dist/agent-scheduler/index.js +31 -1
  2. package/dist/auth-broker/index.js +565 -48
  3. package/dist/cli/autoaccept-poll.js +31 -1
  4. package/dist/cli/drive-write-pretool.mjs +32 -2
  5. package/dist/cli/ms-365-write-pretool.mjs +32 -2
  6. package/dist/cli/switchroom.js +1148 -274
  7. package/dist/host-control/main.js +3 -3
  8. package/dist/vault/approvals/kernel-server.js +2 -2
  9. package/dist/vault/broker/server.js +2 -2
  10. package/package.json +3 -2
  11. package/profiles/_base/start.sh.hbs +1 -0
  12. package/profiles/default/CLAUDE.md.hbs +8 -0
  13. package/skills/mental-model-curator/SKILL.md +68 -2
  14. package/skills/switchroom-cli/SKILL.md +25 -0
  15. package/telegram-plugin/auth-snapshot-format.ts +143 -12
  16. package/telegram-plugin/dist/bridge/bridge.js +8 -2
  17. package/telegram-plugin/dist/gateway/gateway.js +1427 -689
  18. package/telegram-plugin/dist/server.js +8 -2
  19. package/telegram-plugin/external-spend.ts +135 -0
  20. package/telegram-plugin/flushed-turn-supersede.ts +117 -13
  21. package/telegram-plugin/gateway/auth-add-flow.ts +215 -6
  22. package/telegram-plugin/gateway/auth-command.ts +138 -5
  23. package/telegram-plugin/gateway/gateway.ts +141 -158
  24. package/telegram-plugin/gateway/inbound-interceptors.ts +13 -3
  25. package/telegram-plugin/gateway/model-command.ts +309 -1
  26. package/telegram-plugin/gateway/narrative-lane.ts +23 -9
  27. package/telegram-plugin/gateway/outbound-send-path.ts +68 -15
  28. package/telegram-plugin/gateway/session-model-source.ts +90 -10
  29. package/telegram-plugin/gateway/status-pin-store.ts +64 -4
  30. package/telegram-plugin/gateway/stream-render.ts +22 -5
  31. package/telegram-plugin/gateway/usage-mask.ts +29 -0
  32. package/telegram-plugin/hooks/subagent-tracker-pretool.mjs +19 -2
  33. package/telegram-plugin/quota-bar-format.ts +78 -12
  34. package/telegram-plugin/quota-check.ts +17 -2
  35. package/telegram-plugin/reply-owner-resolve.ts +76 -11
  36. package/telegram-plugin/session-tail.ts +27 -3
  37. package/telegram-plugin/tests/activity-card-wiring.test.ts +47 -0
  38. package/telegram-plugin/tests/auth-add-flow.test.ts +367 -5
  39. package/telegram-plugin/tests/auth-snapshot-format.test.ts +41 -0
  40. package/telegram-plugin/tests/external-spend.test.ts +168 -0
  41. package/telegram-plugin/tests/flushed-turn-supersede.test.ts +117 -0
  42. package/telegram-plugin/tests/gateway-session-model-relaunch.test.ts +219 -29
  43. package/telegram-plugin/tests/model-command.test.ts +220 -0
  44. package/telegram-plugin/tests/quota-bar-format.test.ts +43 -0
  45. package/telegram-plugin/tests/quota-check.test.ts +57 -0
  46. package/telegram-plugin/tests/reply-owner-resolve.test.ts +257 -13
  47. package/telegram-plugin/tests/send-reply-golden.test.ts +154 -0
  48. package/telegram-plugin/tests/session-model-source.test.ts +142 -0
  49. package/telegram-plugin/tests/session-tail-first-attach.test.ts +115 -2
  50. package/telegram-plugin/tests/status-pin-store.test.ts +198 -0
  51. package/telegram-plugin/tests/subagent-tracker-hooks.test.ts +50 -0
  52. package/telegram-plugin/tests/usage-footer-freshness.test.ts +141 -0
  53. package/telegram-plugin/tests/usage-mask.test.ts +35 -0
  54. package/telegram-plugin/tests/worker-feed-dispatch.test.ts +27 -0
  55. package/telegram-plugin/tests/worker-feed-pin-persistence.test.ts +131 -1
  56. package/vendor/hindsight-memory/CHANGELOG.md +102 -0
  57. package/vendor/hindsight-memory/README.md +2 -1
  58. package/vendor/hindsight-memory/hooks/hooks.json +12 -0
  59. package/vendor/hindsight-memory/scripts/directive_verify.py +100 -3
  60. package/vendor/hindsight-memory/scripts/lib/config.py +150 -1
  61. package/vendor/hindsight-memory/scripts/lib/content.py +55 -5
  62. package/vendor/hindsight-memory/scripts/lib/directives.py +152 -15
  63. package/vendor/hindsight-memory/scripts/lib/parallel_recall.py +142 -0
  64. package/vendor/hindsight-memory/scripts/lib/state.py +31 -0
  65. package/vendor/hindsight-memory/scripts/recall.py +789 -143
  66. package/vendor/hindsight-memory/scripts/reconcile_tail.py +22 -1
  67. package/vendor/hindsight-memory/scripts/retain.py +71 -2
  68. package/vendor/hindsight-memory/scripts/subagent_retain.py +501 -0
  69. package/vendor/hindsight-memory/scripts/tests/test_directive_verify.py +169 -0
  70. package/vendor/hindsight-memory/scripts/tests/test_directives.py +177 -0
  71. package/vendor/hindsight-memory/scripts/tests/test_lesson_tagging.py +200 -0
  72. package/vendor/hindsight-memory/scripts/tests/test_recall_context_turns_default.py +200 -0
  73. package/vendor/hindsight-memory/scripts/tests/test_recall_envelope_strip_telemetry.py +477 -0
  74. package/vendor/hindsight-memory/scripts/tests/test_recall_integration.py +51 -0
  75. package/vendor/hindsight-memory/scripts/tests/test_recall_parallel_deadline.py +409 -0
  76. package/vendor/hindsight-memory/scripts/tests/test_recall_tag_weights.py +96 -0
  77. package/vendor/hindsight-memory/scripts/tests/test_recall_transcript_fallback.py +413 -0
  78. package/vendor/hindsight-memory/scripts/tests/test_reconcile_durability.py +49 -0
  79. package/vendor/hindsight-memory/scripts/tests/test_subagent_retain.py +439 -0
  80. package/vendor/hindsight-memory/settings.json +3 -1
@@ -4843,6 +4843,12 @@ var ClaimNotificationRequestSchema = exports_external.object({
4843
4843
  key: exports_external.string().min(1).max(512),
4844
4844
  windowMs: exports_external.number().int().positive().max(86400000)
4845
4845
  });
4846
+ var GetExternalSpendRequestSchema = exports_external.object({
4847
+ v: exports_external.literal(PROTOCOL_VERSION),
4848
+ op: exports_external.literal("get-external-spend"),
4849
+ id: exports_external.string().min(1),
4850
+ forceLive: exports_external.boolean().optional()
4851
+ });
4846
4852
  var RequestSchema = exports_external.discriminatedUnion("op", [
4847
4853
  GetCredentialsRequestSchema,
4848
4854
  ListStateRequestSchema,
@@ -4856,7 +4862,8 @@ var RequestSchema = exports_external.discriminatedUnion("op", [
4856
4862
  ListGoogleAccountsRequestSchema,
4857
4863
  ListMicrosoftAccountsRequestSchema,
4858
4864
  ProbeQuotaRequestSchema,
4859
- ClaimNotificationRequestSchema
4865
+ ClaimNotificationRequestSchema,
4866
+ GetExternalSpendRequestSchema
4860
4867
  ]);
4861
4868
  var GetCredentialsDataSchema = exports_external.object({
4862
4869
  account: exports_external.string(),
@@ -4867,6 +4874,8 @@ var AccountStateSchema = exports_external.object({
4867
4874
  label: exports_external.string(),
4868
4875
  expiresAt: exports_external.number().optional(),
4869
4876
  exhausted: exports_external.boolean(),
4877
+ in_service: exports_external.boolean().optional(),
4878
+ entitlement_blocked: exports_external.boolean().optional(),
4870
4879
  exhausted_until: exports_external.number().optional(),
4871
4880
  throttled_until: exports_external.number().optional(),
4872
4881
  threshold_violations: exports_external.number().int().nonnegative().optional(),
@@ -4923,6 +4932,18 @@ var SetOverrideDataSchema = exports_external.object({
4923
4932
  var ClaimNotificationDataSchema = exports_external.object({
4924
4933
  granted: exports_external.boolean()
4925
4934
  });
4935
+ var GetExternalSpendDataSchema = exports_external.object({
4936
+ available: exports_external.boolean(),
4937
+ day24hUsd: exports_external.number().optional(),
4938
+ day7dUsd: exports_external.number().optional(),
4939
+ top: exports_external.array(exports_external.object({
4940
+ label: exports_external.string(),
4941
+ usd: exports_external.number()
4942
+ })).optional(),
4943
+ capturedAtMs: exports_external.number().int().nonnegative().optional(),
4944
+ served: exports_external.enum(["live", "cache"]).optional(),
4945
+ reason: exports_external.string().optional()
4946
+ });
4926
4947
  var GoogleAccountStateSchema = exports_external.object({
4927
4948
  account: exports_external.string(),
4928
4949
  expiresAt: exports_external.number(),
@@ -5120,6 +5141,15 @@ class AuthBrokerClient {
5120
5141
  }
5121
5142
  return parsed;
5122
5143
  }
5144
+ async getExternalSpend(forceLive) {
5145
+ const data = await this.send({
5146
+ v: PROTOCOL_VERSION,
5147
+ id: randomUUID2(),
5148
+ op: "get-external-spend",
5149
+ ...forceLive ? { forceLive: true } : {}
5150
+ });
5151
+ return data;
5152
+ }
5123
5153
  async setActive(account) {
5124
5154
  const data = await this.send({
5125
5155
  v: PROTOCOL_VERSION,
@@ -4000,7 +4000,7 @@ function decodeResponse(line) {
4000
4000
  }
4001
4001
  return ResponseSchema.parse(parsed);
4002
4002
  }
4003
- var MAX_FRAME_BYTES, PROTOCOL_VERSION = 1, ProviderNameSchema, GetCredentialsRequestSchema, ListStateRequestSchema, SetActiveRequestSchema, MarkExhaustedRequestSchema, MarkThrottledRequestSchema, RefreshAccountRequestSchema, AnthropicCredentialsSchema, GoogleCredentialsSchema, MicrosoftCredentialsSchema, ProviderCredentialsSchema, AddAccountRequestSchema, RmAccountRequestSchema, SetOverrideRequestSchema, ListGoogleAccountsRequestSchema, ListMicrosoftAccountsRequestSchema, ProbeQuotaRequestSchema, ClaimNotificationRequestSchema, RequestSchema, GetCredentialsDataSchema, AccountStateSchema, AgentStateSchema, ConsumerStateSchema, ListStateDataSchema, SetActiveDataSchema, MarkExhaustedDataSchema, MarkThrottledDataSchema, RefreshAccountDataSchema, AddAccountDataSchema, RmAccountDataSchema, SetOverrideDataSchema, ClaimNotificationDataSchema, GoogleAccountStateSchema, ListGoogleAccountsDataSchema, MicrosoftAccountStateSchema, ListMicrosoftAccountsDataSchema, ErrorBodySchema, SuccessResponseSchema, ErrorResponseSchema, ResponseSchema;
4003
+ var MAX_FRAME_BYTES, PROTOCOL_VERSION = 1, ProviderNameSchema, GetCredentialsRequestSchema, ListStateRequestSchema, SetActiveRequestSchema, MarkExhaustedRequestSchema, MarkThrottledRequestSchema, RefreshAccountRequestSchema, AnthropicCredentialsSchema, GoogleCredentialsSchema, MicrosoftCredentialsSchema, ProviderCredentialsSchema, AddAccountRequestSchema, RmAccountRequestSchema, SetOverrideRequestSchema, ListGoogleAccountsRequestSchema, ListMicrosoftAccountsRequestSchema, ProbeQuotaRequestSchema, ClaimNotificationRequestSchema, GetExternalSpendRequestSchema, RequestSchema, GetCredentialsDataSchema, AccountStateSchema, AgentStateSchema, ConsumerStateSchema, ListStateDataSchema, SetActiveDataSchema, MarkExhaustedDataSchema, MarkThrottledDataSchema, RefreshAccountDataSchema, AddAccountDataSchema, RmAccountDataSchema, SetOverrideDataSchema, ClaimNotificationDataSchema, GetExternalSpendDataSchema, GoogleAccountStateSchema, ListGoogleAccountsDataSchema, MicrosoftAccountStateSchema, ListMicrosoftAccountsDataSchema, ErrorBodySchema, SuccessResponseSchema, ErrorResponseSchema, ResponseSchema;
4004
4004
  var init_protocol = __esm(() => {
4005
4005
  init_zod();
4006
4006
  MAX_FRAME_BYTES = 64 * 1024;
@@ -4131,6 +4131,12 @@ var init_protocol = __esm(() => {
4131
4131
  key: exports_external.string().min(1).max(512),
4132
4132
  windowMs: exports_external.number().int().positive().max(86400000)
4133
4133
  });
4134
+ GetExternalSpendRequestSchema = exports_external.object({
4135
+ v: exports_external.literal(PROTOCOL_VERSION),
4136
+ op: exports_external.literal("get-external-spend"),
4137
+ id: exports_external.string().min(1),
4138
+ forceLive: exports_external.boolean().optional()
4139
+ });
4134
4140
  RequestSchema = exports_external.discriminatedUnion("op", [
4135
4141
  GetCredentialsRequestSchema,
4136
4142
  ListStateRequestSchema,
@@ -4144,7 +4150,8 @@ var init_protocol = __esm(() => {
4144
4150
  ListGoogleAccountsRequestSchema,
4145
4151
  ListMicrosoftAccountsRequestSchema,
4146
4152
  ProbeQuotaRequestSchema,
4147
- ClaimNotificationRequestSchema
4153
+ ClaimNotificationRequestSchema,
4154
+ GetExternalSpendRequestSchema
4148
4155
  ]);
4149
4156
  GetCredentialsDataSchema = exports_external.object({
4150
4157
  account: exports_external.string(),
@@ -4155,6 +4162,8 @@ var init_protocol = __esm(() => {
4155
4162
  label: exports_external.string(),
4156
4163
  expiresAt: exports_external.number().optional(),
4157
4164
  exhausted: exports_external.boolean(),
4165
+ in_service: exports_external.boolean().optional(),
4166
+ entitlement_blocked: exports_external.boolean().optional(),
4158
4167
  exhausted_until: exports_external.number().optional(),
4159
4168
  throttled_until: exports_external.number().optional(),
4160
4169
  threshold_violations: exports_external.number().int().nonnegative().optional(),
@@ -4211,6 +4220,18 @@ var init_protocol = __esm(() => {
4211
4220
  ClaimNotificationDataSchema = exports_external.object({
4212
4221
  granted: exports_external.boolean()
4213
4222
  });
4223
+ GetExternalSpendDataSchema = exports_external.object({
4224
+ available: exports_external.boolean(),
4225
+ day24hUsd: exports_external.number().optional(),
4226
+ day7dUsd: exports_external.number().optional(),
4227
+ top: exports_external.array(exports_external.object({
4228
+ label: exports_external.string(),
4229
+ usd: exports_external.number()
4230
+ })).optional(),
4231
+ capturedAtMs: exports_external.number().int().nonnegative().optional(),
4232
+ served: exports_external.enum(["live", "cache"]).optional(),
4233
+ reason: exports_external.string().optional()
4234
+ });
4214
4235
  GoogleAccountStateSchema = exports_external.object({
4215
4236
  account: exports_external.string(),
4216
4237
  expiresAt: exports_external.number(),
@@ -4381,6 +4402,15 @@ class AuthBrokerClient {
4381
4402
  }
4382
4403
  return parsed;
4383
4404
  }
4405
+ async getExternalSpend(forceLive) {
4406
+ const data = await this.send({
4407
+ v: PROTOCOL_VERSION,
4408
+ id: randomUUID(),
4409
+ op: "get-external-spend",
4410
+ ...forceLive ? { forceLive: true } : {}
4411
+ });
4412
+ return data;
4413
+ }
4384
4414
  async setActive(account) {
4385
4415
  const data = await this.send({
4386
4416
  v: PROTOCOL_VERSION,
@@ -4002,7 +4002,7 @@ function decodeResponse(line) {
4002
4002
  }
4003
4003
  return ResponseSchema.parse(parsed);
4004
4004
  }
4005
- var MAX_FRAME_BYTES, PROTOCOL_VERSION = 1, ProviderNameSchema, GetCredentialsRequestSchema, ListStateRequestSchema, SetActiveRequestSchema, MarkExhaustedRequestSchema, MarkThrottledRequestSchema, RefreshAccountRequestSchema, AnthropicCredentialsSchema, GoogleCredentialsSchema, MicrosoftCredentialsSchema, ProviderCredentialsSchema, AddAccountRequestSchema, RmAccountRequestSchema, SetOverrideRequestSchema, ListGoogleAccountsRequestSchema, ListMicrosoftAccountsRequestSchema, ProbeQuotaRequestSchema, ClaimNotificationRequestSchema, RequestSchema, GetCredentialsDataSchema, AccountStateSchema, AgentStateSchema, ConsumerStateSchema, ListStateDataSchema, SetActiveDataSchema, MarkExhaustedDataSchema, MarkThrottledDataSchema, RefreshAccountDataSchema, AddAccountDataSchema, RmAccountDataSchema, SetOverrideDataSchema, ClaimNotificationDataSchema, GoogleAccountStateSchema, ListGoogleAccountsDataSchema, MicrosoftAccountStateSchema, ListMicrosoftAccountsDataSchema, ErrorBodySchema, SuccessResponseSchema, ErrorResponseSchema, ResponseSchema;
4005
+ var MAX_FRAME_BYTES, PROTOCOL_VERSION = 1, ProviderNameSchema, GetCredentialsRequestSchema, ListStateRequestSchema, SetActiveRequestSchema, MarkExhaustedRequestSchema, MarkThrottledRequestSchema, RefreshAccountRequestSchema, AnthropicCredentialsSchema, GoogleCredentialsSchema, MicrosoftCredentialsSchema, ProviderCredentialsSchema, AddAccountRequestSchema, RmAccountRequestSchema, SetOverrideRequestSchema, ListGoogleAccountsRequestSchema, ListMicrosoftAccountsRequestSchema, ProbeQuotaRequestSchema, ClaimNotificationRequestSchema, GetExternalSpendRequestSchema, RequestSchema, GetCredentialsDataSchema, AccountStateSchema, AgentStateSchema, ConsumerStateSchema, ListStateDataSchema, SetActiveDataSchema, MarkExhaustedDataSchema, MarkThrottledDataSchema, RefreshAccountDataSchema, AddAccountDataSchema, RmAccountDataSchema, SetOverrideDataSchema, ClaimNotificationDataSchema, GetExternalSpendDataSchema, GoogleAccountStateSchema, ListGoogleAccountsDataSchema, MicrosoftAccountStateSchema, ListMicrosoftAccountsDataSchema, ErrorBodySchema, SuccessResponseSchema, ErrorResponseSchema, ResponseSchema;
4006
4006
  var init_protocol = __esm(() => {
4007
4007
  init_zod();
4008
4008
  MAX_FRAME_BYTES = 64 * 1024;
@@ -4133,6 +4133,12 @@ var init_protocol = __esm(() => {
4133
4133
  key: exports_external.string().min(1).max(512),
4134
4134
  windowMs: exports_external.number().int().positive().max(86400000)
4135
4135
  });
4136
+ GetExternalSpendRequestSchema = exports_external.object({
4137
+ v: exports_external.literal(PROTOCOL_VERSION),
4138
+ op: exports_external.literal("get-external-spend"),
4139
+ id: exports_external.string().min(1),
4140
+ forceLive: exports_external.boolean().optional()
4141
+ });
4136
4142
  RequestSchema = exports_external.discriminatedUnion("op", [
4137
4143
  GetCredentialsRequestSchema,
4138
4144
  ListStateRequestSchema,
@@ -4146,7 +4152,8 @@ var init_protocol = __esm(() => {
4146
4152
  ListGoogleAccountsRequestSchema,
4147
4153
  ListMicrosoftAccountsRequestSchema,
4148
4154
  ProbeQuotaRequestSchema,
4149
- ClaimNotificationRequestSchema
4155
+ ClaimNotificationRequestSchema,
4156
+ GetExternalSpendRequestSchema
4150
4157
  ]);
4151
4158
  GetCredentialsDataSchema = exports_external.object({
4152
4159
  account: exports_external.string(),
@@ -4157,6 +4164,8 @@ var init_protocol = __esm(() => {
4157
4164
  label: exports_external.string(),
4158
4165
  expiresAt: exports_external.number().optional(),
4159
4166
  exhausted: exports_external.boolean(),
4167
+ in_service: exports_external.boolean().optional(),
4168
+ entitlement_blocked: exports_external.boolean().optional(),
4160
4169
  exhausted_until: exports_external.number().optional(),
4161
4170
  throttled_until: exports_external.number().optional(),
4162
4171
  threshold_violations: exports_external.number().int().nonnegative().optional(),
@@ -4213,6 +4222,18 @@ var init_protocol = __esm(() => {
4213
4222
  ClaimNotificationDataSchema = exports_external.object({
4214
4223
  granted: exports_external.boolean()
4215
4224
  });
4225
+ GetExternalSpendDataSchema = exports_external.object({
4226
+ available: exports_external.boolean(),
4227
+ day24hUsd: exports_external.number().optional(),
4228
+ day7dUsd: exports_external.number().optional(),
4229
+ top: exports_external.array(exports_external.object({
4230
+ label: exports_external.string(),
4231
+ usd: exports_external.number()
4232
+ })).optional(),
4233
+ capturedAtMs: exports_external.number().int().nonnegative().optional(),
4234
+ served: exports_external.enum(["live", "cache"]).optional(),
4235
+ reason: exports_external.string().optional()
4236
+ });
4216
4237
  GoogleAccountStateSchema = exports_external.object({
4217
4238
  account: exports_external.string(),
4218
4239
  expiresAt: exports_external.number(),
@@ -4383,6 +4404,15 @@ class AuthBrokerClient {
4383
4404
  }
4384
4405
  return parsed;
4385
4406
  }
4407
+ async getExternalSpend(forceLive) {
4408
+ const data = await this.send({
4409
+ v: PROTOCOL_VERSION,
4410
+ id: randomUUID(),
4411
+ op: "get-external-spend",
4412
+ ...forceLive ? { forceLive: true } : {}
4413
+ });
4414
+ return data;
4415
+ }
4386
4416
  async setActive(account) {
4387
4417
  const data = await this.send({
4388
4418
  v: PROTOCOL_VERSION,