dsh-ptc-plus 0.3.2 → 0.4.1

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 (199) hide show
  1. package/README.en.md +65 -78
  2. package/README.md +65 -78
  3. package/assets/ptc-plus-bindings-en.png +0 -0
  4. package/assets/ptc-plus-bindings-zh.png +0 -0
  5. package/assets/ptc-plus-repair-en.png +0 -0
  6. package/assets/ptc-plus-repair-zh.png +0 -0
  7. package/assets/ptc-plus-repl-workspace-en.png +0 -0
  8. package/assets/ptc-plus-repl-workspace-zh.png +0 -0
  9. package/assets/ptc-plus-settings-en.png +0 -0
  10. package/assets/ptc-plus-settings-zh.png +0 -0
  11. package/client.js +30596 -742
  12. package/compiler-amaro.cjs +5 -0
  13. package/compiler-amaro.cjs.map +6 -0
  14. package/compiler-asset-124f80c1bba92ff5fe79cfec6e8ad518f476de4a42514cae3919538887f510e8.txt +1 -0
  15. package/compiler-assets.json +3 -0
  16. package/compiler-core.cjs +554 -0
  17. package/compiler-core.cjs.map +6 -0
  18. package/compiler-platform.cjs +2 -0
  19. package/compiler-platform.cjs.map +6 -0
  20. package/compiler-typescript.cjs +388 -0
  21. package/compiler-typescript.cjs.map +6 -0
  22. package/docs/README.md +6 -0
  23. package/docs/adr/0004-declare-program-bindings-at-the-host.md +1 -1
  24. package/docs/adr/0006-rewrite-module-syntax-with-an-ast.md +5 -3
  25. package/docs/adr/0007-separate-worker-transport-from-session-semantics.md +1 -1
  26. package/docs/adr/0009-bound-expensive-acceptance-default.md +2 -0
  27. package/docs/adr/0010-session-log-derived-recovery-tips.md +59 -5
  28. package/docs/adr/0011-isolate-the-local-recovery-tip-provider.md +1 -1
  29. package/docs/adr/0012-preserve-mixed-destructuring-initialization.md +3 -1
  30. package/docs/adr/0013-isolate-repl-redeclaration-convenience.md +3 -1
  31. package/docs/adr/0014-persist-cell-rewrite-policy.md +6 -2
  32. package/docs/adr/0015-preserve-source-positions-through-rewrites.md +1 -1
  33. package/docs/adr/0016-archive-resolved-review-findings.md +1 -1
  34. package/docs/adr/0017-track-the-latest-dsh-public-surface.md +49 -0
  35. package/docs/adr/0018-use-versioned-fixture-for-ab-benchmark.md +3 -3
  36. package/docs/adr/0019-plugin-settings-and-kill-switch.md +5 -3
  37. package/docs/adr/0020-optional-cordis-tools-in-ptc-mode.md +2 -2
  38. package/docs/adr/0021-separate-host-bootstrap-from-session-runtime.md +12 -0
  39. package/docs/adr/0023-global-user-bindings.md +104 -0
  40. package/docs/adr/0024-repl-console-observation.md +33 -0
  41. package/docs/adr/0025-use-versioned-logical-binding-identities.md +119 -0
  42. package/docs/adr/0026-persist-the-delivery-verdict-against-the-verified-candidate.md +21 -0
  43. package/docs/adr/0027-run-the-session-kernel-in-a-killable-helper-process.md +37 -0
  44. package/docs/adr/0028-attach-to-the-host-ptc-execution-seam.md +103 -0
  45. package/docs/adr/0029-keep-plugin-unavailability-out-of-the-host-agent-lifecycle.md +27 -0
  46. package/docs/adr/0030-serve-both-typert-codec-generations-from-one-codec.md +27 -0
  47. package/docs/architecture.md +73 -21
  48. package/docs/binding-review-placement-design.md +200 -0
  49. package/docs/capability-projection.md +1 -1
  50. package/docs/client-ui.md +95 -19
  51. package/docs/durability-design.md +25 -10
  52. package/docs/evaluation.md +78 -6
  53. package/docs/installation.md +41 -6
  54. package/docs/publishing.md +5 -3
  55. package/docs/runtime-reference.md +72 -25
  56. package/docs/semantic-validation.md +29 -0
  57. package/docs/stateful-binding-updates-proposal.md +755 -0
  58. package/docs/user-bindings.en.md +64 -0
  59. package/docs/user-bindings.md +64 -0
  60. package/docs/value-wire.md +3 -3
  61. package/docs/verification.md +57 -0
  62. package/index.js +369 -92
  63. package/internal/ast-traversal.js +5 -2
  64. package/internal/binding-descriptors.js +1 -0
  65. package/internal/binding-pattern-traversal.js +25 -0
  66. package/internal/binding-pattern.js +26 -29
  67. package/internal/binding-source-analysis.js +391 -0
  68. package/internal/binding-update-policy.js +66 -0
  69. package/internal/bounded-worker-round.js +56 -0
  70. package/internal/callable-definition-environment.js +42 -0
  71. package/internal/callable-source-catalog.js +129 -0
  72. package/internal/callable-source-encoding.js +47 -0
  73. package/internal/callable-source-facts.js +459 -0
  74. package/internal/callable-source-format.js +2 -0
  75. package/internal/callable-source-lowering.js +123 -0
  76. package/internal/cell-analysis-contract.js +25 -0
  77. package/internal/cell-analysis.js +240 -290
  78. package/internal/cell-completion.js +15 -0
  79. package/internal/cell-error.js +7 -0
  80. package/internal/cell-parser.js +66 -0
  81. package/internal/cell-rewriter.js +3 -677
  82. package/internal/commonjs-export-evidence.js +63 -0
  83. package/internal/commonjs-source-evidence.js +72 -0
  84. package/internal/compiler-amaro.cjs +2 -0
  85. package/internal/compiler-compression.js +12 -0
  86. package/internal/compiler-data.js +58 -0
  87. package/internal/compiler-descriptors.js +54 -0
  88. package/internal/compiler-dynamic-cache.js +48 -0
  89. package/internal/compiler-entry.js +35 -0
  90. package/internal/compiler-generated-names.js +17 -0
  91. package/internal/compiler-intrinsics.js +84 -0
  92. package/internal/compiler-module-links.js +34 -0
  93. package/internal/compiler-operations.js +61 -0
  94. package/internal/compiler-platform-factory.js +84 -0
  95. package/internal/compiler-platform.js +136 -0
  96. package/internal/compiler-record-roles.js +53 -0
  97. package/internal/compiler-region-output.js +259 -0
  98. package/internal/compiler-resource-lowering.js +103 -0
  99. package/internal/compiler-scope-facts.js +115 -0
  100. package/internal/compiler-service.js +109 -0
  101. package/internal/compiler-source-cache.js +32 -0
  102. package/internal/compiler-source-pieces.js +93 -0
  103. package/internal/compiler-source-regions.js +132 -0
  104. package/internal/compiler-storage-source.js +54 -0
  105. package/internal/compiler-text.js +15 -0
  106. package/internal/compiler-typescript.cjs +2 -0
  107. package/internal/config-spec.js +83 -27
  108. package/internal/cordis-tools-owner.js +130 -21
  109. package/internal/diagnostic.js +27 -1
  110. package/internal/direct-surface-owner.js +76 -23
  111. package/internal/dynamic-binding-evidence.js +16 -0
  112. package/internal/dynamic-environment-compiler.js +779 -0
  113. package/internal/dynamic-environment-integration.js +87 -0
  114. package/internal/dynamic-environment-runtime.js +362 -0
  115. package/internal/dynamic-native-calls.js +150 -0
  116. package/internal/dynamic-native-runtime.js +248 -0
  117. package/internal/dynamic-scope-analysis.js +90 -0
  118. package/internal/edit-transport-owner.js +27 -2
  119. package/internal/execution-seam-compat.js +193 -0
  120. package/internal/failure-reporting.js +118 -18
  121. package/internal/host-rpc.js +66 -0
  122. package/internal/isolated-worker.js +548 -0
  123. package/internal/kernel-child.js +139 -0
  124. package/internal/kernel-worker.js +904 -120
  125. package/internal/language-semantics.js +14 -0
  126. package/internal/legacy-binding-catalog.js +48 -0
  127. package/internal/legacy-cell-analysis.js +600 -0
  128. package/internal/legacy-cell-parser.js +50 -0
  129. package/internal/legacy-cell-rewriter.js +631 -0
  130. package/internal/legacy-repl-convenience.js +291 -0
  131. package/internal/managed-module-operations.js +170 -0
  132. package/internal/module-compilation.js +321 -0
  133. package/internal/module-runtime-platform.js +19 -0
  134. package/internal/module-transform-contract.js +12 -0
  135. package/internal/native-await-declarations.js +68 -0
  136. package/internal/native-root-compilation.js +54 -0
  137. package/internal/native-root-dynamic.js +67 -0
  138. package/internal/recovery-tips.js +27 -15
  139. package/internal/rejected-cell-editor.js +13 -8
  140. package/internal/repl-convenience.js +2 -289
  141. package/internal/repl-memory-projection.js +81 -12
  142. package/internal/repl-observation-interest.js +70 -0
  143. package/internal/repl-rewrite-contract.js +6 -0
  144. package/internal/repl-scope-normalizer.js +2091 -0
  145. package/internal/repl-value-observer.js +114 -0
  146. package/internal/rpc-contract.js +52 -0
  147. package/internal/runtime-bridge-owner.js +172 -28
  148. package/internal/runtime-config.js +48 -52
  149. package/internal/runtime-contexts.js +82 -10
  150. package/internal/runtime-messages.js +111 -0
  151. package/internal/session-cell-executor.js +401 -87
  152. package/internal/session-journal-recovery.js +684 -0
  153. package/internal/session-journal-schema.js +106 -0
  154. package/internal/session-journal.js +184 -654
  155. package/internal/session-log-view.js +42 -9
  156. package/internal/session-runtime.js +256 -95
  157. package/internal/session-state.js +247 -71
  158. package/internal/source-position-map.js +211 -71
  159. package/internal/stateful-module-compiler.js +154 -0
  160. package/internal/stateful-module-runtime.js +303 -0
  161. package/internal/stateful-root-compiler.js +598 -0
  162. package/internal/stateful-root-runtime.js +340 -0
  163. package/internal/typert-codec-compat.js +28 -0
  164. package/internal/typescript-transform.js +29 -0
  165. package/internal/user-binding-authoring.js +70 -0
  166. package/internal/user-binding-console-worker.js +184 -0
  167. package/internal/user-binding-console.js +148 -0
  168. package/internal/user-binding-draft-projection.js +335 -0
  169. package/internal/user-binding-model-context.js +31 -0
  170. package/internal/user-binding-runner.js +56 -0
  171. package/internal/user-bindings-owner.js +1065 -0
  172. package/internal/user-bindings-store.js +293 -0
  173. package/internal/user-bindings.js +353 -0
  174. package/internal/value-wire-schema.js +28 -0
  175. package/internal/value-wire.js +29 -20
  176. package/internal/worker-client.js +57 -67
  177. package/internal/worker-environment.js +45 -0
  178. package/internal/worker-output-relay.js +29 -0
  179. package/internal/worker-shutdown.js +14 -0
  180. package/package.json +75 -7
  181. package/src/client-activity.js +88 -53
  182. package/src/client-authoring-view.js +580 -0
  183. package/src/client-binding-review.js +230 -0
  184. package/src/client-bindings-data.js +29 -0
  185. package/src/client-catalog.js +127 -0
  186. package/src/client-code-editor.js +84 -0
  187. package/src/client-console.js +112 -0
  188. package/src/client-copy.js +370 -0
  189. package/src/client-feature-gates.js +62 -0
  190. package/src/client-host-compat.js +150 -0
  191. package/src/client-indicator-view.js +267 -0
  192. package/src/client-repl-view.js +292 -0
  193. package/src/client-rpc.js +20 -0
  194. package/src/client-settings-view.js +221 -0
  195. package/src/client-styles.js +106 -0
  196. package/src/client-tool-view.js +108 -0
  197. package/src/client-transport.js +159 -0
  198. package/src/client-workbench.js +521 -0
  199. package/src/client.js +233 -615
@@ -0,0 +1,2 @@
1
+ export const CALLABLE_SOURCE_FORMAT = 'ptc-callable-sources-v1'
2
+ export const CALLABLE_SOURCE_BLOCK_UNITS = 16_384
@@ -0,0 +1,123 @@
1
+ import { parse } from '@babel/parser'
2
+ import { types as t } from '@babel/core'
3
+ import generatorImport from '@babel/generator'
4
+ import traverseImport from '@babel/traverse'
5
+ import { callableDefinitionOwner, closeDefinitionExpression } from './callable-definition-environment.js'
6
+
7
+ const generate = generatorImport.default ?? generatorImport
8
+ const traverse = traverseImport.default ?? traverseImport
9
+ const nativeParserOptions = { sourceType: 'script', allowAwaitOutsideFunction: true, allowYieldOutsideFunction: true,
10
+ allowSuperOutsideMethod: true, allowNewTargetOutsideFunction: true }
11
+ const parserOptions = { sourceType: 'script', plugins: ['typescript', 'decorators', 'decoratorAutoAccessors'],
12
+ ...nativeParserOptions, allowReturnOutsideFunction: true, errorRecovery: true }
13
+ const methodNode = node => t.isObjectMethod(node) || t.isClassMethod(node) || t.isClassPrivateMethod(node)
14
+ const text = node => generate(node).code
15
+
16
+ /** Definition-time decorators belong to the enclosing class, not the method value. */
17
+ export function undecoratedMethodSource(node) {
18
+ const method = t.cloneNode(node, true)
19
+ method.decorators = null
20
+ method.static = false
21
+ method.accessibility = null
22
+ for (const parameter of method.params) parameter.decorators = null
23
+ return text(method)
24
+ }
25
+
26
+ /** A decorated declaration's range may include its parent's export modifiers. */
27
+ export function decoratedClassSource(node) {
28
+ const value = t.cloneNode(node, true)
29
+ value.type = 'ClassExpression'
30
+ value.abstract = false
31
+ return text(value)
32
+ }
33
+
34
+ /** A body owns only the helper bindings it can use, including dependencies of
35
+ * those helpers. Parameter and key activations obtain their own lexical set. */
36
+ function closeCallableHelpers(value, helpers) {
37
+ const callable = t.isMethod(value) ? { ...value, type: 'ObjectMethod' } : value
38
+ const tree = t.file(t.program([...helpers, t.expressionStatement(t.isMethod(callable)
39
+ ? t.objectExpression([callable]) : callable)]))
40
+ const bodies = new Map([[callable, new Set()]])
41
+ const dependencies = new Map(helpers.map(node => [node, new Set()]))
42
+ const statement = path => {
43
+ while (!path.parentPath.isProgram()) path = path.parentPath
44
+ return path.node
45
+ }
46
+ traverse(tree, { Function(path) {
47
+ if (callableDefinitionOwner(path) && !dependencies.has(statement(path))) bodies.set(path.node, new Set())
48
+ } })
49
+ traverse(tree, { ReferencedIdentifier(path) {
50
+ const binding = path.scope.getBinding(path.node.name)
51
+ if (binding === undefined) return
52
+ const helper = statement(binding.path)
53
+ if (!dependencies.has(helper)) return
54
+ const consumer = dependencies.get(statement(path))
55
+ if (consumer) consumer.add(helper)
56
+ else {
57
+ let child = path
58
+ while (child.parentPath) {
59
+ const parent = child.parentPath
60
+ if (bodies.has(parent.node) && child.key === 'body') {
61
+ bodies.get(parent.node).add(helper)
62
+ break
63
+ }
64
+ child = parent
65
+ }
66
+ }
67
+ } })
68
+ for (const [body, required] of bodies) {
69
+ for (const helper of required) for (const dependency of dependencies.get(helper)) required.add(dependency)
70
+ if (!t.isBlockStatement(body.body)) body.body = t.blockStatement([t.returnStatement(body.body)])
71
+ body.body.body.unshift(...helpers.filter(node => required.has(node)).map(node => t.cloneNode(node, true)))
72
+ }
73
+ value.body = callable.body
74
+ }
75
+
76
+ /** Close generated language helpers over the source that actually needs them. */
77
+ export function lowerCallableSource(original, { method = false, lowerNativeSource, privateNames = [], sourceType = 'script' }) {
78
+ // Grammar-only containers must not acquire logical declaration identities.
79
+ // Every fragment crosses lowering as an expression, including method hosts.
80
+ const prefix = method ? '(class {' : '('
81
+ const suffix = method ? '})' : ')'
82
+ let input = prefix + original + suffix
83
+ const nativeOptions = { ...nativeParserOptions, sourceType, errorRecovery: true }
84
+ const tree = parse(input, { ...parserOptions, sourceType })
85
+ let contextual = privateNames.length > 0
86
+ t.traverseFast(tree, node => {
87
+ if (t.isSuper(node) || t.isMetaProperty(node) && node.meta.name === 'new') contextual = true
88
+ })
89
+ // Declaration ownership is assigned after dialect normalization. This
90
+ // inspection only selects the detached fragment's surrounding grammar.
91
+ traverse(tree, { noScope: true,
92
+ ...traverse.visitors.environmentVisitor({ YieldExpression() { contextual = true } }),
93
+ })
94
+ if (!method && t.isClass(tree.program.body[0].expression) && tree.program.body[0].expression.id === null) {
95
+ input = `({[""]:${input}})[""]`
96
+ }
97
+ if (contextual) {
98
+ const body = `async *source(){return ${input}}`
99
+ input = privateNames.length > 0 ? `(class{${privateNames.map(name => `#${name};`).join('')}${body}})`
100
+ : `({${body}})`
101
+ }
102
+ const lowered = lowerNativeSource(input, { sourceType })
103
+ const native = parse(lowered, nativeOptions)
104
+ const helpers = native.program.body.slice(0, -1)
105
+ let expression = native.program.body.at(-1).expression
106
+ if (contextual) {
107
+ const body = (privateNames.length > 0 ? expression.body.body : expression.properties)
108
+ .find(methodNode).body.body
109
+ helpers.push(...body.slice(0, -1))
110
+ expression = body.at(-1).argument
111
+ }
112
+ const value = method ? expression.body.body.find(methodNode) : expression
113
+ let source
114
+ if (t.isFunction(value)) {
115
+ closeCallableHelpers(value, helpers)
116
+ source = text(value)
117
+ } else {
118
+ source = text(helpers.length === 0 ? value : closeDefinitionExpression(helpers, value))
119
+ }
120
+ const emittedSource = method ? `class Source{${source}}` : `(${source})`
121
+ const emitted = parse(emittedSource, nativeOptions)
122
+ return { source, emitted, emittedSource }
123
+ }
@@ -0,0 +1,25 @@
1
+ export function declarationSpan(node) {
2
+ const start = node.loc?.start
3
+ /* c8 ignore next */
4
+ const end = node.loc?.end ?? start
5
+ /* c8 ignore next */
6
+ if (start === undefined) return undefined
7
+ return {
8
+ line: start.line,
9
+ column: start.column + 1,
10
+ /* c8 ignore next */
11
+ ...(end === undefined ? {} : {
12
+ end: {
13
+ line: end.line,
14
+ column: end.column + 1,
15
+ },
16
+ }),
17
+ }
18
+ }
19
+
20
+ export class PreflightError extends Error {
21
+ constructor(message, node, span = undefined) {
22
+ super(message)
23
+ this.span = span ?? declarationSpan(node)
24
+ }
25
+ }