@playcraft/common 0.1.59-beta → 0.1.61-beta

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 (61) hide show
  1. package/dist/cloud-workspace/runtime/batch-runs.d.ts +42 -7
  2. package/dist/cloud-workspace/runtime/batch-runs.d.ts.map +1 -1
  3. package/dist/cloud-workspace/runtime/batch-runs.js +2 -1
  4. package/dist/cloud-workspace/runtime/batch-runs.js.map +1 -1
  5. package/dist/cloud-workspace/runtime/delivery-format.d.ts +20 -0
  6. package/dist/cloud-workspace/runtime/delivery-format.d.ts.map +1 -0
  7. package/dist/cloud-workspace/runtime/delivery-format.js +73 -0
  8. package/dist/cloud-workspace/runtime/delivery-format.js.map +1 -0
  9. package/dist/cloud-workspace/runtime/execution-admission.d.ts +18 -2
  10. package/dist/cloud-workspace/runtime/execution-admission.d.ts.map +1 -1
  11. package/dist/cloud-workspace/runtime/execution-admission.js +6 -0
  12. package/dist/cloud-workspace/runtime/execution-admission.js.map +1 -1
  13. package/dist/cloud-workspace/runtime/generations.d.ts +1 -1
  14. package/dist/cloud-workspace/runtime/generations.d.ts.map +1 -1
  15. package/dist/cloud-workspace/runtime/generations.js +1 -0
  16. package/dist/cloud-workspace/runtime/generations.js.map +1 -1
  17. package/dist/cloud-workspace/runtime/index.d.ts +4 -1
  18. package/dist/cloud-workspace/runtime/index.d.ts.map +1 -1
  19. package/dist/cloud-workspace/runtime/index.js +4 -1
  20. package/dist/cloud-workspace/runtime/index.js.map +1 -1
  21. package/dist/cloud-workspace/runtime/operations.d.ts +48 -0
  22. package/dist/cloud-workspace/runtime/operations.d.ts.map +1 -1
  23. package/dist/cloud-workspace/runtime/operations.js +4 -1
  24. package/dist/cloud-workspace/runtime/operations.js.map +1 -1
  25. package/dist/cloud-workspace/runtime/platform-endpoints.d.ts +1 -0
  26. package/dist/cloud-workspace/runtime/platform-endpoints.d.ts.map +1 -1
  27. package/dist/cloud-workspace/runtime/platform-endpoints.js +1 -0
  28. package/dist/cloud-workspace/runtime/platform-endpoints.js.map +1 -1
  29. package/dist/cloud-workspace/runtime/remix-references.d.ts +138 -0
  30. package/dist/cloud-workspace/runtime/remix-references.d.ts.map +1 -1
  31. package/dist/cloud-workspace/runtime/remix-references.js +14 -0
  32. package/dist/cloud-workspace/runtime/remix-references.js.map +1 -1
  33. package/dist/cloud-workspace/runtime/scheduled-task-proposals.d.ts +581 -0
  34. package/dist/cloud-workspace/runtime/scheduled-task-proposals.d.ts.map +1 -0
  35. package/dist/cloud-workspace/runtime/scheduled-task-proposals.js +70 -0
  36. package/dist/cloud-workspace/runtime/scheduled-task-proposals.js.map +1 -0
  37. package/dist/cloud-workspace/runtime/scheduled-tasks.d.ts +5 -1
  38. package/dist/cloud-workspace/runtime/scheduled-tasks.d.ts.map +1 -1
  39. package/dist/cloud-workspace/runtime/scheduled-tasks.js +12 -0
  40. package/dist/cloud-workspace/runtime/scheduled-tasks.js.map +1 -1
  41. package/dist/cloud-workspace/runtime/skill-execution-policy.d.ts +19 -0
  42. package/dist/cloud-workspace/runtime/skill-execution-policy.d.ts.map +1 -0
  43. package/dist/cloud-workspace/runtime/skill-execution-policy.js +31 -0
  44. package/dist/cloud-workspace/runtime/skill-execution-policy.js.map +1 -0
  45. package/dist/cloud-workspace/runtime/skills.d.ts +19 -0
  46. package/dist/cloud-workspace/runtime/skills.d.ts.map +1 -1
  47. package/dist/cloud-workspace/runtime/skills.js +10 -1
  48. package/dist/cloud-workspace/runtime/skills.js.map +1 -1
  49. package/dist/cloud-workspace/runtime/workspace-notifications.d.ts +9 -0
  50. package/dist/cloud-workspace/runtime/workspace-notifications.d.ts.map +1 -1
  51. package/dist/cloud-workspace/runtime/workspace-notifications.js +54 -0
  52. package/dist/cloud-workspace/runtime/workspace-notifications.js.map +1 -1
  53. package/dist/platform-loop-control.d.ts +20 -0
  54. package/dist/platform-loop-control.d.ts.map +1 -0
  55. package/dist/platform-loop-control.js +96 -0
  56. package/dist/platform-loop-control.js.map +1 -0
  57. package/dist/platform-tasks.d.ts +151 -0
  58. package/dist/platform-tasks.d.ts.map +1 -0
  59. package/dist/platform-tasks.js +2 -0
  60. package/dist/platform-tasks.js.map +1 -0
  61. package/package.json +9 -1
@@ -17,10 +17,10 @@ export declare const scheduledTaskRunStatusSchema: z.ZodEnum<{
17
17
  queued: "queued";
18
18
  cancelled: "cancelled";
19
19
  preparing: "preparing";
20
- skipped: "skipped";
21
20
  waiting_user: "waiting_user";
22
21
  reconciling: "reconciling";
23
22
  succeeded: "succeeded";
23
+ skipped: "skipped";
24
24
  }>;
25
25
  export declare const scheduledTaskNotificationPolicySchema: z.ZodEnum<{
26
26
  important_updates: "important_updates";
@@ -251,4 +251,8 @@ export type ScheduledTaskSnapshot = ScheduledTaskConfiguration & {
251
251
  targetBinding: Record<string, unknown>;
252
252
  };
253
253
  export declare function isTerminalScheduledTaskRun(status: ScheduledTaskRunStatus): boolean;
254
+ /** A standalone run's session id is the only place its origin is recorded; no table column exists. */
255
+ export declare const SCHEDULED_RUN_SESSION_PREFIX = "scheduled_session_";
256
+ export declare function scheduledRunSessionId(digest: string): string;
257
+ export declare function isScheduledRunSessionId(sessionId: string): boolean;
254
258
  //# sourceMappingURL=scheduled-tasks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-tasks.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/scheduled-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,uBAAuB,4CAA6C,CAAC;AAClF,eAAO,MAAM,2BAA2B,sIAG9B,CAAC;AACX,eAAO,MAAM,gCAAgC,0DAA2D,CAAC;AACzG,eAAO,MAAM,oCAAoC,uEAAwE,CAAC;AAC1H,eAAO,MAAM,oBAAoB,8CAA+C,CAAC;AACjF,eAAO,MAAM,0BAA0B,kCAAmC,CAAC;AAC3E,eAAO,MAAM,yBAAyB;;;;EAAkC,CAAC;AACzE,eAAO,MAAM,4BAA4B;;;;;;;;;;;EAAsC,CAAC;AAChF,eAAO,MAAM,qCAAqC;;;;;EAA+C,CAAC;AAClG,eAAO,MAAM,uBAAuB;;;EAA+B,CAAC;AACpE,eAAO,MAAM,4BAA4B;;;EAAqC,CAAC;AAC/E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAClF,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAC;AACpG,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAIlF,eAAO,MAAM,2BAA2B,aAGF,CAAC;AAEvC,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;4BAYtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAqBhF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAA0E,CAAC;AACxH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAEM,CAAC;AAC7C,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAEM,CAAC;AAC7C,eAAO,MAAM,0BAA0B;;kBAAqE,CAAC;AAC7G,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;kBAEpC,CAAC;AACZ,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAC1F,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE9F,2FAA2F;AAC3F,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,GAAG;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAElF"}
1
+ {"version":3,"file":"scheduled-tasks.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/scheduled-tasks.ts"],"names":[],"mappings":"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"}
@@ -73,4 +73,16 @@ export const scheduledTaskSchedulePreviewSchema = z.object({
73
73
  export function isTerminalScheduledTaskRun(status) {
74
74
  return SCHEDULED_TASK_TERMINAL_STATUSES.includes(status);
75
75
  }
76
+ /** A standalone run's session id is the only place its origin is recorded; no table column exists. */
77
+ export const SCHEDULED_RUN_SESSION_PREFIX = 'scheduled_session_';
78
+ const SCHEDULED_RUN_SESSION_PATTERN = /^scheduled_session_[0-9a-f]{64}$/;
79
+ export function scheduledRunSessionId(digest) {
80
+ const id = `${SCHEDULED_RUN_SESSION_PREFIX}${digest}`;
81
+ if (!SCHEDULED_RUN_SESSION_PATTERN.test(id))
82
+ throw new Error('scheduled_run_session_digest_invalid');
83
+ return id;
84
+ }
85
+ export function isScheduledRunSessionId(sessionId) {
86
+ return SCHEDULED_RUN_SESSION_PATTERN.test(sessionId);
87
+ }
76
88
  //# sourceMappingURL=scheduled-tasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduled-tasks.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/scheduled-tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduled-tasks.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/scheduled-tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { ProjectSkillLockEntry } from '../../project-skills/types.js';
2
+ import type { WorkspaceComposerContext } from './composer-context.js';
3
+ export declare const SKILL_EXECUTION_POLICY_VERSION: 1;
4
+ export declare const PROCEDURAL_3D_SKILL_REF = "remix/playcraft-procedural-3d";
5
+ /** Reviewed host policy; neither frontmatter nor caller-supplied access modes grant a lease. */
6
+ export declare function skillRequiresExclusiveTurn(skillRef: string): boolean;
7
+ export type WorkspaceSkillExecutionPolicy = {
8
+ skillExecutionPolicyVersion: typeof SKILL_EXECUTION_POLICY_VERSION;
9
+ directoryAccessMode: 'shared' | 'exclusive';
10
+ lockHash: string;
11
+ declarationHash: string;
12
+ entries: ProjectSkillLockEntry[];
13
+ };
14
+ /** Both dispatchers derive admission from their current, validated complete project lock. */
15
+ export declare function resolveWorkspaceSkillExecutionPolicy(snapshot: {
16
+ declaration: unknown;
17
+ lock: unknown;
18
+ }, selections: WorkspaceComposerContext['skills']): WorkspaceSkillExecutionPolicy;
19
+ //# sourceMappingURL=skill-execution-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-execution-policy.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/skill-execution-policy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,eAAO,MAAM,8BAA8B,EAAG,CAAU,CAAC;AACzD,eAAO,MAAM,uBAAuB,kCAAkC,CAAC;AAEvE,gGAAgG;AAChG,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,2BAA2B,EAAE,OAAO,8BAA8B,CAAC;IACnE,mBAAmB,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,qBAAqB,EAAE,CAAC;CAClC,CAAC;AAEF,6FAA6F;AAC7F,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,EACjD,UAAU,EAAE,wBAAwB,CAAC,QAAQ,CAAC,GAC7C,6BAA6B,CAqB/B"}
@@ -0,0 +1,31 @@
1
+ import { effectiveProjectSkills, projectSkillsDigest, validateProjectSkillsSnapshot, } from '../../project-skills/protocol.js';
2
+ export const SKILL_EXECUTION_POLICY_VERSION = 1;
3
+ export const PROCEDURAL_3D_SKILL_REF = 'remix/playcraft-procedural-3d';
4
+ /** Reviewed host policy; neither frontmatter nor caller-supplied access modes grant a lease. */
5
+ export function skillRequiresExclusiveTurn(skillRef) {
6
+ return skillRef === PROCEDURAL_3D_SKILL_REF;
7
+ }
8
+ /** Both dispatchers derive admission from their current, validated complete project lock. */
9
+ export function resolveWorkspaceSkillExecutionPolicy(snapshot, selections) {
10
+ const { declaration, lock } = validateProjectSkillsSnapshot(snapshot.declaration, snapshot.lock);
11
+ const lockHash = projectSkillsDigest(lock);
12
+ const available = effectiveProjectSkills(declaration, lock, 'sandbox-agent');
13
+ const entries = selections.map((selected) => {
14
+ if (selected.lockHash !== lockHash)
15
+ throw new Error('context_skills_changed');
16
+ const entry = available.find((item) => item.entryKey === selected.entryKey);
17
+ if (!entry)
18
+ throw new Error('context_skill_unavailable');
19
+ return entry;
20
+ });
21
+ return {
22
+ skillExecutionPolicyVersion: SKILL_EXECUTION_POLICY_VERSION,
23
+ lockHash,
24
+ declarationHash: lock.declarationHash,
25
+ entries,
26
+ directoryAccessMode: entries.some((entry) => skillRequiresExclusiveTurn(entry.revision.skillRef))
27
+ ? 'exclusive'
28
+ : 'shared',
29
+ };
30
+ }
31
+ //# sourceMappingURL=skill-execution-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-execution-policy.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/skill-execution-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,kCAAkC,CAAC;AAI1C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAU,CAAC;AACzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,+BAA+B,CAAC;AAEvE,gGAAgG;AAChG,MAAM,UAAU,0BAA0B,CAAC,QAAgB;IACzD,OAAO,QAAQ,KAAK,uBAAuB,CAAC;AAC9C,CAAC;AAUD,6FAA6F;AAC7F,MAAM,UAAU,oCAAoC,CAClD,QAAiD,EACjD,UAA8C;IAE9C,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,6BAA6B,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjG,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,sBAAsB,CAAC,WAAW,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC1C,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IACH,OAAO;QACL,2BAA2B,EAAE,8BAA8B;QAC3D,QAAQ;QACR,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,OAAO;QACP,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1C,0BAA0B,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACpD;YACC,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,QAAQ;KACb,CAAC;AACJ,CAAC"}
@@ -1,5 +1,23 @@
1
1
  import { z } from 'zod';
2
2
  import type { ProjectSkillDeclaration, ProjectSkillsLockV3 } from '../../project-skills/types.js';
3
+ /** Reviewed native bundles available through the existing platform Skill release gates. */
4
+ export declare const WORKSPACE_BUILTIN_SKILLS: readonly [{
5
+ readonly name: "playcraft-video-understanding";
6
+ readonly skillRef: "remix/playcraft-video-understanding";
7
+ readonly defaultOnInitialize: true;
8
+ }, {
9
+ readonly name: "playcraft-replica-validation";
10
+ readonly skillRef: "remix/playcraft-replica-validation";
11
+ readonly defaultOnInitialize: true;
12
+ }, {
13
+ readonly name: "playcraft-procedural-3d";
14
+ readonly skillRef: "remix/playcraft-procedural-3d";
15
+ readonly defaultOnInitialize: false;
16
+ }];
17
+ export type WorkspaceBuiltinSkillName = typeof WORKSPACE_BUILTIN_SKILLS[number]['name'];
18
+ export type WorkspaceBuiltinSkillRef = typeof WORKSPACE_BUILTIN_SKILLS[number]['skillRef'];
19
+ export declare const WORKSPACE_BUILTIN_SKILL_NAMES: [WorkspaceBuiltinSkillName, ...WorkspaceBuiltinSkillName[]];
20
+ export declare const WORKSPACE_BUILTIN_SKILL_REFS: [WorkspaceBuiltinSkillRef, ...WorkspaceBuiltinSkillRef[]];
3
21
  /** Original distributed bytes eligible for an explicit, reviewable platform-release migration. */
4
22
  export declare const LEGACY_VIDEO_SOURCE_HASHES: Readonly<Record<string, string>>;
5
23
  export type WorkspaceSkillsView = {
@@ -18,6 +36,7 @@ export declare const workspaceSkillsUpdatePayloadSchema: z.ZodDiscriminatedUnion
18
36
  names: z.ZodArray<z.ZodEnum<{
19
37
  "playcraft-video-understanding": "playcraft-video-understanding";
20
38
  "playcraft-replica-validation": "playcraft-replica-validation";
39
+ "playcraft-procedural-3d": "playcraft-procedural-3d";
21
40
  }>>;
22
41
  expectedDeclarationHash: z.ZodString;
23
42
  expectedLockHash: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAElG,kGAAkG;AAClG,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGvE,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,uBAAuB,CAAC;IACrC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzF,CAAC;AAGF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;8BAwB7C,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC"}
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAElG,2FAA2F;AAC3F,eAAO,MAAM,wBAAwB;;;;;;;;;;;;EAI3B,CAAC;AACX,MAAM,MAAM,yBAAyB,GAAG,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACxF,MAAM,MAAM,wBAAwB,GAAG,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;AAC3F,eAAO,MAAM,6BAA6B,EACxC,CAAC,yBAAyB,EAAE,GAAG,yBAAyB,EAAE,CAAC,CAAC;AAC9D,eAAO,MAAM,4BAA4B,EACvC,CAAC,wBAAwB,EAAE,GAAG,wBAAwB,EAAE,CAAC,CAAC;AAE5D,kGAAkG;AAClG,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGvE,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,uBAAuB,CAAC;IACrC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzF,CAAC;AAGF,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;8BAyB7C,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC"}
@@ -1,4 +1,12 @@
1
1
  import { z } from 'zod';
2
+ /** Reviewed native bundles available through the existing platform Skill release gates. */
3
+ export const WORKSPACE_BUILTIN_SKILLS = [
4
+ { name: 'playcraft-video-understanding', skillRef: 'remix/playcraft-video-understanding', defaultOnInitialize: true },
5
+ { name: 'playcraft-replica-validation', skillRef: 'remix/playcraft-replica-validation', defaultOnInitialize: true },
6
+ { name: 'playcraft-procedural-3d', skillRef: 'remix/playcraft-procedural-3d', defaultOnInitialize: false },
7
+ ];
8
+ export const WORKSPACE_BUILTIN_SKILL_NAMES = WORKSPACE_BUILTIN_SKILLS.map(skill => skill.name);
9
+ export const WORKSPACE_BUILTIN_SKILL_REFS = WORKSPACE_BUILTIN_SKILLS.map(skill => skill.skillRef);
2
10
  /** Original distributed bytes eligible for an explicit, reviewable platform-release migration. */
3
11
  export const LEGACY_VIDEO_SOURCE_HASHES = {
4
12
  'playcraft-video-understanding': 'a46732c75bc5855f38679b5c0c93dc7aeb771f82499b11d3c907ad8a4eeb49a3',
@@ -8,7 +16,8 @@ const declarationHash = z.string().regex(/^[a-f0-9]{64}$/);
8
16
  export const workspaceSkillsUpdatePayloadSchema = z.discriminatedUnion('action', [
9
17
  z.object({
10
18
  action: z.literal('import-builtins'),
11
- names: z.array(z.enum(['playcraft-video-understanding', 'playcraft-replica-validation'])).min(1).max(2),
19
+ names: z.array(z.enum(WORKSPACE_BUILTIN_SKILL_NAMES)).min(1).max(WORKSPACE_BUILTIN_SKILL_NAMES.length)
20
+ .refine(names => new Set(names).size === names.length),
12
21
  expectedDeclarationHash: declarationHash,
13
22
  expectedLockHash: declarationHash,
14
23
  }).strict(),
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,kGAAkG;AAClG,MAAM,CAAC,MAAM,0BAA0B,GAAqC;IAC1E,+BAA+B,EAAE,kEAAkE;IACnG,8BAA8B,EAAE,kEAAkE;CACnG,CAAC;AASF,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE;IAC/E,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACpC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,+BAA+B,EAAE,8BAA8B,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvG,uBAAuB,EAAE,eAAe;QACxC,gBAAgB,EAAE,eAAe;KAClC,CAAC,CAAC,MAAM,EAAE;IACX,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACrC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aACzD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC;QACrD,uBAAuB,EAAE,eAAe;QACxC,gBAAgB,EAAE,eAAe;KAClC,CAAC,CAAC,MAAM,EAAE;IACX,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACzB,uBAAuB,EAAE,eAAe,CAAC,QAAQ,EAAE;KACpD,CAAC,CAAC,MAAM,EAAE;IACX,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACpC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,uBAAuB,EAAE,eAAe;KACzC,CAAC,CAAC,MAAM,EAAE;CACZ,CAAC,CAAC"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,2FAA2F;AAC3F,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,EAAE,IAAI,EAAE,+BAA+B,EAAE,QAAQ,EAAE,qCAAqC,EAAE,mBAAmB,EAAE,IAAI,EAAE;IACrH,EAAE,IAAI,EAAE,8BAA8B,EAAE,QAAQ,EAAE,oCAAoC,EAAE,mBAAmB,EAAE,IAAI,EAAE;IACnH,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,+BAA+B,EAAE,mBAAmB,EAAE,KAAK,EAAE;CAClG,CAAC;AAGX,MAAM,CAAC,MAAM,6BAA6B,GAAG,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAChC,CAAC;AAC9D,MAAM,CAAC,MAAM,4BAA4B,GAAG,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CACrC,CAAC;AAE5D,kGAAkG;AAClG,MAAM,CAAC,MAAM,0BAA0B,GAAqC;IAC1E,+BAA+B,EAAE,kEAAkE;IACnG,8BAA8B,EAAE,kEAAkE;CACnG,CAAC;AASF,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE;IAC/E,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACpC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,6BAA6B,CAAC,MAAM,CAAC;aACnG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC;QACxD,uBAAuB,EAAE,eAAe;QACxC,gBAAgB,EAAE,eAAe;KAClC,CAAC,CAAC,MAAM,EAAE;IACX,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACrC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;aACzD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC;QACrD,uBAAuB,EAAE,eAAe;QACxC,gBAAgB,EAAE,eAAe;KAClC,CAAC,CAAC,MAAM,EAAE;IACX,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACzB,uBAAuB,EAAE,eAAe,CAAC,QAAQ,EAAE;KACpD,CAAC,CAAC,MAAM,EAAE;IACX,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACpC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,uBAAuB,EAAE,eAAe;KACzC,CAAC,CAAC,MAAM,EAAE;CACZ,CAAC,CAAC"}
@@ -10,6 +10,11 @@ export declare const workspaceNotificationPayloadSchema: z.ZodObject<{
10
10
  artifact: "artifact";
11
11
  }>>;
12
12
  chatSessionIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
13
+ assistantSessionIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
14
+ sessionActivities: z.ZodOptional<z.ZodArray<z.ZodObject<{
15
+ sessionId: z.ZodString;
16
+ updatedAt: z.ZodString;
17
+ }, z.core.$strict>>>;
13
18
  events: z.ZodOptional<z.ZodArray<z.ZodObject<{
14
19
  streamKind: z.ZodEnum<{
15
20
  session: "session";
@@ -30,6 +35,10 @@ export declare const workspaceNotificationPayloadSchema: z.ZodObject<{
30
35
  }, z.core.$strict>>>;
31
36
  }, z.core.$strict>;
32
37
  export type WorkspaceNotificationPayload = z.infer<typeof workspaceNotificationPayloadSchema>;
38
+ /** Conversation activity excludes reads, native restores and session metadata changes. */
39
+ export declare function isSessionActivityEvent(event: Pick<PublicEvent, 'type' | 'payload'>): boolean;
40
+ /** Only assistant reply content advances unread positions; execution and user events do not. */
41
+ export declare function isAssistantReplyEvent(event: Pick<PublicEvent, 'type' | 'payload'>): boolean;
33
42
  /** Panels react to invalidations; conversation text and command output stay in the chat stream. */
34
43
  export declare function workspaceEventRefreshScope(event: Pick<PublicEvent, 'type' | 'payload'>): WorkspaceRefreshScope | 'none';
35
44
  /** A batch advances past every source event, including chat-only or other-directory changes. */
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-notifications.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/workspace-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAGlE,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AACjF,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAErD,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;kBAKpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAY9F,mGAAmG;AACnG,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,qBAAqB,GAAG,MAAM,CAOvH;AAED,gGAAgG;AAChG,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EAAE,EACrB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAC1D,WAAW,GAAG,SAAS,CA8BzB"}
1
+ {"version":3,"file":"workspace-notifications.d.ts","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/workspace-notifications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAGlE,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AACjF,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAErD,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAUpC,CAAC;AACZ,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAkB9F,0FAA0F;AAC1F,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAI5F;AAED,gGAAgG;AAChG,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAkB3F;AAED,mGAAmG;AACnG,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,qBAAqB,GAAG,MAAM,CAOvH;AAED,gGAAgG;AAChG,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EAAE,EACrB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAC1D,WAAW,GAAG,SAAS,CA2CzB"}
@@ -6,6 +6,11 @@ const CONTROL_EVENTS = new Set(['ui.command.requested', 'ui.command.resolved', '
6
6
  export const workspaceNotificationPayloadSchema = z.object({
7
7
  scopes: z.array(z.enum(['state', 'content', 'preview', 'artifact'])).max(4),
8
8
  chatSessionIds: z.array(z.string().min(1).max(128)).max(WORKSPACE_NOTIFICATION_BATCH_SIZE).optional(),
9
+ assistantSessionIds: z.array(z.string().min(1).max(128)).max(WORKSPACE_NOTIFICATION_BATCH_SIZE).optional(),
10
+ sessionActivities: z.array(z.object({
11
+ sessionId: z.string().min(1).max(128),
12
+ updatedAt: z.string().datetime(),
13
+ }).strict()).max(WORKSPACE_NOTIFICATION_BATCH_SIZE).optional(),
9
14
  events: z.array(publicEventSchema.refine(event => CONTROL_EVENTS.has(event.type)))
10
15
  .max(WORKSPACE_NOTIFICATION_BATCH_SIZE).optional(),
11
16
  }).strict();
@@ -16,8 +21,43 @@ const NO_REFRESH = new Set([
16
21
  ]);
17
22
  const STATE_REFRESH = new Set([
18
23
  'session.created', 'thread/started', 'thread/status/changed', 'turn/started', 'error', 'terminal.created',
24
+ 'session.metadata.updated', 'session.archived',
19
25
  ]);
20
26
  const CONVERSATION_ITEMS = new Set(['agentMessage', 'reasoning', 'userMessage', 'imageView']);
27
+ const SESSION_ACTIVITY_EVENTS = new Set([
28
+ 'turn/started', 'turn/completed', 'turn/failed', 'turn/interrupted',
29
+ 'turn.started', 'turn.completed', 'turn.failed', 'turn.interrupted',
30
+ 'message.user', 'message.delta', 'message.completed', 'item/agentMessage/delta',
31
+ ]);
32
+ /** Conversation activity excludes reads, native restores and session metadata changes. */
33
+ export function isSessionActivityEvent(event) {
34
+ return SESSION_ACTIVITY_EVENTS.has(event.type) ||
35
+ (['item/started', 'item/completed'].includes(event.type) &&
36
+ ['userMessage', 'agentMessage'].includes(String(record(record(event.payload).item).type)));
37
+ }
38
+ /** Only assistant reply content advances unread positions; execution and user events do not. */
39
+ export function isAssistantReplyEvent(event) {
40
+ const payload = record(event.payload);
41
+ const hint = record(payload.subAgent);
42
+ const thread = record(payload.thread);
43
+ const item = record(payload.item);
44
+ const spawn = record(record(record(thread.source).subAgent).thread_spawn);
45
+ const threadId = [hint.threadId, payload.threadId, thread.id, item.senderThreadId]
46
+ .find(value => typeof value === 'string' && value.length > 0);
47
+ const parent = [hint.parentThreadId, thread.parentThreadId, spawn.parent_thread_id]
48
+ .find(value => typeof value === 'string' && value.length > 0);
49
+ const root = [hint.rootThreadId, payload.rootThreadId, thread.rootThreadId]
50
+ .find(value => typeof value === 'string' && value.length > 0);
51
+ if (payload.isSubAgentReply === true || (threadId &&
52
+ ((typeof hint.threadId === 'string' && hint.threadId.length > 0) || parent || (root && root !== threadId))))
53
+ return false;
54
+ if (['message.delta', 'message.completed', 'item/agentMessage/delta'].includes(event.type))
55
+ return true;
56
+ if (!['item/completed', 'item.completed'].includes(event.type))
57
+ return false;
58
+ return item.type === 'agentMessage' || (item.type === 'exitedReviewMode' &&
59
+ ((typeof item.review === 'string' && item.review.length > 0) || item.hasReviewText === true));
60
+ }
21
61
  /** Panels react to invalidations; conversation text and command output stay in the chat stream. */
22
62
  export function workspaceEventRefreshScope(event) {
23
63
  if (NO_REFRESH.has(event.type))
@@ -39,6 +79,8 @@ export function workspaceEventNotification(workspaceId, events, directoryName, s
39
79
  return undefined;
40
80
  const scopes = new Set();
41
81
  const chatSessionIds = new Set();
82
+ const assistantSessionIds = new Set();
83
+ const sessionActivities = new Map();
42
84
  const controls = [];
43
85
  for (const event of events) {
44
86
  const payload = record(event.payload);
@@ -49,6 +91,16 @@ export function workspaceEventNotification(workspaceId, events, directoryName, s
49
91
  if (typeof payload.sessionId === 'string' && payload.sessionId.length > 0 && payload.sessionId.length <= 128 &&
50
92
  chatSessionIds.size < WORKSPACE_NOTIFICATION_BATCH_SIZE)
51
93
  chatSessionIds.add(payload.sessionId);
94
+ if (typeof payload.sessionId === 'string' && payload.sessionId.length > 0 && payload.sessionId.length <= 128 &&
95
+ isAssistantReplyEvent(event) && assistantSessionIds.size < WORKSPACE_NOTIFICATION_BATCH_SIZE)
96
+ assistantSessionIds.add(payload.sessionId);
97
+ if (typeof payload.sessionId === 'string' && payload.sessionId.length > 0 && payload.sessionId.length <= 128 &&
98
+ isSessionActivityEvent(event) && Number.isFinite(Date.parse(event.occurredAt)) &&
99
+ (sessionActivities.has(payload.sessionId) || sessionActivities.size < WORKSPACE_NOTIFICATION_BATCH_SIZE)) {
100
+ const previous = sessionActivities.get(payload.sessionId);
101
+ if (!previous || Date.parse(event.occurredAt) > Date.parse(previous))
102
+ sessionActivities.set(payload.sessionId, event.occurredAt);
103
+ }
52
104
  const control = controlPayload(event.type, payload);
53
105
  if (control)
54
106
  controls.push({
@@ -64,6 +116,8 @@ export function workspaceEventNotification(workspaceId, events, directoryName, s
64
116
  type: 'workspace.notifications', payload: {
65
117
  scopes: [...scopes],
66
118
  ...(chatSessionIds.size ? { chatSessionIds: [...chatSessionIds] } : {}),
119
+ ...(assistantSessionIds.size ? { assistantSessionIds: [...assistantSessionIds] } : {}),
120
+ ...(sessionActivities.size ? { sessionActivities: [...sessionActivities].map(([sessionId, updatedAt]) => ({ sessionId, updatedAt })) } : {}),
67
121
  ...(controls.length ? { events: controls } : {}),
68
122
  },
69
123
  occurredAt: last.occurredAt,
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-notifications.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/workspace-notifications.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-notifications.js","sourceRoot":"","sources":["../../../src/cloud-workspace/runtime/workspace-notifications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type PlatformLoopSnapshot = {
2
+ environment: string;
3
+ pausedKeys: string[];
4
+ };
5
+ export type PlatformLoopGateOptions = {
6
+ environment: string;
7
+ loadSnapshot(): Promise<unknown>;
8
+ cacheMs?: number;
9
+ now?: () => number;
10
+ onError?: (error: unknown) => void;
11
+ };
12
+ /** One process shares a snapshot; individual loops keep their original scheduling and ownership. */
13
+ export declare function createPlatformLoopGate(options: PlatformLoopGateOptions): {
14
+ shouldRun: (ownerService: string, key: string) => Promise<boolean>;
15
+ run: <T>(ownerService: string, key: string, operation: () => T | Promise<T>) => Promise<T | undefined>;
16
+ refresh: () => Promise<void>;
17
+ };
18
+ /** Called only at periodic, startup-recovery and scheduler-wakeup boundaries. */
19
+ export declare function runPlatformLoop<T>(ownerService: string, key: string, operation: () => T | Promise<T>): Promise<T | undefined>;
20
+ //# sourceMappingURL=platform-loop-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-loop-control.d.ts","sourceRoot":"","sources":["../src/platform-loop-control.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AACjF,MAAM,MAAM,uBAAuB,GAAG;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,oGAAoG;AACpG,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB;8BA2B9B,MAAM,OAAO,MAAM;UAOvC,CAAC,gBAAgB,MAAM,OAAO,MAAM,aAAa,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;;EAQlH;AASD,iFAAiF;AACjF,wBAAsB,eAAe,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CA2BnI"}
@@ -0,0 +1,96 @@
1
+ import { generateSignedHeaders } from './auth/signature.js';
2
+ /** One process shares a snapshot; individual loops keep their original scheduling and ownership. */
3
+ export function createPlatformLoopGate(options) {
4
+ let paused;
5
+ let attemptedAt = -Infinity;
6
+ let refreshing;
7
+ const running = new Set();
8
+ const now = options.now ?? Date.now;
9
+ const cacheMs = options.cacheMs ?? 5_000;
10
+ function refresh() {
11
+ if (refreshing)
12
+ return refreshing;
13
+ attemptedAt = now();
14
+ refreshing = (async () => {
15
+ try {
16
+ const value = await options.loadSnapshot();
17
+ if (!value || typeof value !== 'object')
18
+ throw new Error('Invalid loop control snapshot');
19
+ const snapshot = value;
20
+ if (snapshot.environment !== options.environment || !Array.isArray(snapshot.pausedKeys)
21
+ || snapshot.pausedKeys.length > 1_000 || !snapshot.pausedKeys.every(key => typeof key === 'string'
22
+ && /^(?:business|agent|runtime|auth|model-proxy):[a-z0-9_]+$/.test(key)))
23
+ throw new Error('Invalid loop control snapshot');
24
+ paused = new Set(snapshot.pausedKeys);
25
+ }
26
+ catch (error) {
27
+ options.onError?.(error);
28
+ }
29
+ finally {
30
+ refreshing = undefined;
31
+ }
32
+ })();
33
+ return refreshing;
34
+ }
35
+ async function shouldRun(ownerService, key) {
36
+ if (refreshing)
37
+ await refreshing;
38
+ else if (now() - attemptedAt >= cacheMs)
39
+ await refresh();
40
+ // No first snapshot means no authorization to start. A known pause survives connection loss.
41
+ return paused !== undefined && !paused.has(`${ownerService}:${key}`);
42
+ }
43
+ async function run(ownerService, key, operation) {
44
+ const identity = `${ownerService}:${key}`;
45
+ if (running.has(identity))
46
+ return;
47
+ running.add(identity);
48
+ try {
49
+ if (await shouldRun(ownerService, key))
50
+ return await operation();
51
+ }
52
+ finally {
53
+ running.delete(identity);
54
+ }
55
+ }
56
+ return { shouldRun, run, refresh };
57
+ }
58
+ const serviceNames = {
59
+ business: 'backend-business-server', agent: 'backend-agent-server', runtime: 'backend-runtime-server',
60
+ auth: 'backend-auth-server', 'model-proxy': 'backend-model-proxy-server',
61
+ };
62
+ let defaultGate;
63
+ let defaultIdentity = '';
64
+ /** Called only at periodic, startup-recovery and scheduler-wakeup boundaries. */
65
+ export async function runPlatformLoop(ownerService, key, operation) {
66
+ const secret = process.env.EMIT_SECRET?.trim();
67
+ if (!secret)
68
+ return;
69
+ const base = process.env.BUSINESS_SERVER_URL?.trim() || process.env.BACKEND_API_URL?.trim() || 'http://127.0.0.1:3001';
70
+ const environment = process.env.AGENT_OWNER_ENV || process.env.PLAYCRAFT_ENV || 'local';
71
+ const identity = JSON.stringify([base, environment, secret]);
72
+ if (!defaultGate || defaultIdentity !== identity) {
73
+ defaultIdentity = identity;
74
+ let warned = false;
75
+ defaultGate = createPlatformLoopGate({ environment, onError: () => {
76
+ if (!warned)
77
+ console.warn('Platform loop control unavailable; retaining the last confirmed control state');
78
+ warned = true;
79
+ }, loadSnapshot: async () => {
80
+ const url = new URL(base);
81
+ if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password || url.search || url.hash)
82
+ throw new Error('Invalid loop control address');
83
+ url.pathname = `${url.pathname.replace(/\/+$/, '').replace(/\/api$/, '')}/api/internal/platform-tasks/loop-controls`;
84
+ const path = url.pathname.replace(/^\/__env\/[A-Za-z0-9_-]+(?=\/)/, '');
85
+ const response = await fetch(url, { method: 'GET', redirect: 'error', cache: 'no-store', signal: AbortSignal.timeout(3_000),
86
+ headers: generateSignedHeaders('GET', path, secret, serviceNames[ownerService] ?? 'backend-business-server') });
87
+ if (!response.ok)
88
+ throw new Error('Loop control unavailable');
89
+ const body = await response.json();
90
+ warned = false;
91
+ return body && typeof body === 'object' && 'result' in body ? body.result : body;
92
+ } });
93
+ }
94
+ return defaultGate.run(ownerService, key, operation);
95
+ }
96
+ //# sourceMappingURL=platform-loop-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-loop-control.js","sourceRoot":"","sources":["../src/platform-loop-control.ts"],"names":[],"mappings":"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"}